2
2
#define _PCITOOL_PCI_H
4
4
#define PCILIB_MAX_BANKS 6
5
#define PCILIB_REGISTER_TIMEOUT 10000 /**< us */
8
9
#include "driver/pciDriver.h"
11
#define pcilib_memcpy memcpy32
12
#define pcilib_memcpy pcilib_memcpy32
13
#define pcilib_datacpy pcilib_datacpy32
15
typedef struct pcilib_s pcilib_t;
17
typedef uint8_t pcilib_bar_t; /**< Type holding the PCI Bar number */
18
typedef uint8_t pcilib_register_t; /**< Type holding the register ID within the Bank */
19
typedef uint8_t pcilib_register_addr_t; /**< Type holding the register ID within the Bank */
20
typedef uint8_t pcilib_register_bank_t; /**< Type holding the register bank number */
21
typedef uint8_t pcilib_register_bank_addr_t; /**< Type holding the register bank number */
22
typedef uint8_t pcilib_register_size_t; /**< Type holding the size in bits of the register */
23
typedef uint32_t pcilib_register_value_t; /**< Type holding the register value */
26
PCILIB_LITTLE_ENDIAN = 0,
15
33
PCILIB_MODEL_IPECAMERA
20
37
PCILIB_REGISTER_R = 1,
21
38
PCILIB_REGISTER_W = 2,
22
39
PCILIB_REGISTER_RW = 3
23
40
} pcilib_register_mode_t;
26
44
IPECAMERA_REGISTER_PROTOCOL
27
45
} pcilib_register_protocol_t;
47
#define PCILIB_BAR_DETECT ((pcilib_bar_t)-1)
48
#define PCILIB_REGISTER_INVALID ((pcilib_register_t)-1)
49
#define PCILIB_ADDRESS_INVALID ((uintptr_t)-1)
50
#define PCILIB_REGISTER_BANK0 0
53
pcilib_register_bank_addr_t addr;
55
pcilib_register_protocol_t protocol;
59
uint8_t raw_endianess;
63
} pcilib_register_bank_description_t;
66
pcilib_register_addr_t addr;
67
pcilib_register_size_t bits;
68
pcilib_register_value_t defvalue;
33
69
pcilib_register_mode_t mode;
71
pcilib_register_bank_t bank;
37
pcilib_register_protocol_t protocol;
41
74
const char *description;
75
} pcilib_register_description_t;
83
pcilib_register_bank_t bank;
47
84
} pcilib_register_range_t;
87
int (*read)(pcilib_t *ctx, pcilib_register_bank_description_t *bank, pcilib_register_addr_t addr, uint8_t bits, pcilib_register_value_t *value);
88
int (*write)(pcilib_t *ctx, pcilib_register_bank_description_t *bank, pcilib_register_addr_t addr, uint8_t bits, pcilib_register_value_t value);
89
} pcilib_protocol_description_t;
49
91
#include "ipecamera.h"
52
pcilib_register_t *registers;
94
pcilib_register_description_t *registers;
95
pcilib_register_bank_description_t *banks;
53
96
pcilib_register_range_t *ranges;
54
97
} pcilib_model_description_t;
56
99
#ifdef _PCILIB_PCI_C
57
pcilib_model_description_t pcilib_model_description[2] = {
59
{ ipecamera_registers, ipecamera_register_range }
100
pcilib_model_description_t pcilib_model[3] = {
101
{ NULL, NULL, NULL },
102
{ NULL, NULL, NULL },
103
{ ipecamera_registers, ipecamera_register_banks, ipecamera_register_ranges }
106
pcilib_protocol_description_t pcilib_protocol[2] = {
107
{ ipecamera_read, ipecamera_write },
62
extern pcilib_model_description_t pcilib_model_description[];
111
extern void (*pcilib_error)(const char *msg, ...);
112
extern void (*pcilib_warning)(const char *msg, ...);
114
extern pcilib_model_description_t pcilib_model[];
115
extern pcilib_protocol_description_t pcilib_protocol[];
63
116
#endif /* _PCILIB_PCI_C */
66
int pcilib_open(const char *device);
67
void pcilib_close(int handle);
69
118
int pcilib_set_error_handler(void (*err)(const char *msg, ...));
71
const pci_board_info *pcilib_get_board_info(int handle);
72
pcilib_model_t pcilib_detect_model(int handle);
73
void *pcilib_map_bar(int handle, int bar);
74
void pcilib_unmap_bar(int handle, int bar, void *data);
76
int pcilib_read(void *buf, int handle, int bar, unsigned long addr, int size);
77
int pcilib_write(void *buf, int handle, int bar, unsigned long addr, int size);
79
int pcilib_find_register(pcilib_model_t model, const char *reg);
121
pcilib_t *pcilib_open(const char *device, pcilib_model_t model);
122
void pcilib_close(pcilib_t *ctx);
124
const pci_board_info *pcilib_get_board_info(pcilib_t *ctx);
125
pcilib_model_t pcilib_get_model(pcilib_t *ctx);
127
void *pcilib_map_bar(pcilib_t *ctx, pcilib_bar_t bar);
128
void pcilib_unmap_bar(pcilib_t *ctx, pcilib_bar_t bar, void *data);
130
pcilib_register_t pcilib_find_register(pcilib_t *ctx, const char *reg);
131
char *pcilib_resolve_register_address(pcilib_t *ctx, uintptr_t addr);
133
int pcilib_read(pcilib_t *ctx, pcilib_bar_t bar, uintptr_t addr, size_t size, void *buf);
134
int pcilib_write(pcilib_t *ctx, pcilib_bar_t bar, uintptr_t addr, size_t size, void *buf);
81
137
#endif /* _PCITOOL_PCI_H */