10 #ifndef _DRIVER_MANAGER_H_ 11 #define _DRIVER_MANAGER_H_ 25 #define DRVMGR_LEVEL_MAX 4 30 #ifndef DRVMGR_USE_LOCKS 31 #define DRVMGR_USE_LOCKS 1 39 #define BUS_LIST_HEAD(list) LIST_HEAD(list, struct drvmgr_bus) 40 #define BUS_LIST_TAIL(list) LIST_TAIL(list, struct drvmgr_bus) 41 #define DEV_LIST_HEAD(list) LIST_HEAD(list, struct drvmgr_dev) 42 #define DEV_LIST_TAIL(list) LIST_TAIL(list, struct drvmgr_dev) 43 #define DRV_LIST_HEAD(list) LIST_HEAD(list, struct drvmgr_drv) 44 #define DRV_LIST_TAIL(list) LIST_TAIL(list, struct drvmgr_drv) 47 #define DRVMGR_BUS_TYPE_NONE 0 48 #define DRVMGR_BUS_TYPE_ROOT 1 49 #define DRVMGR_BUS_TYPE_PCI 2 50 #define DRVMGR_BUS_TYPE_AMBAPP 3 51 #define DRVMGR_BUS_TYPE_LEON2_AMBA 4 52 #define DRVMGR_BUS_TYPE_AMBAPP_DIST 5 53 #define DRVMGR_BUS_TYPE_SPW_RMAP 6 54 #define DRVMGR_BUS_TYPE_AMBAPP_RMAP 7 79 #define DRIVER_ID_BUS_MASK 0x00000000000000FFULL 82 #define DRIVER_ID_RSV_MASK 0xFF00000000000000ULL 85 #define DRIVER_ID_DEV_MASK 0x00FFFFFFFFFFFF00ULL 88 #define DRIVER_ID(busid, devid) ((unsigned long long) \ 89 ((((unsigned long long)(devid) << 8) & DRIVER_ID_DEV_MASK) | \ 90 ((unsigned long long)(busid) & DRIVER_ID_BUS_MASK))) 93 #define DRIVER_BUSID_GET(id) ((unsigned long long)(id) & DRIVER_ID_BUS_MASK) 94 #define DRIVER_DEVID_GET(id) (((unsigned long long)(id) & DRIVER_ID_DEV_MASK) >> 8) 96 #define DRIVER_ROOTBUS_ID(bus_type) DRIVER_ID(bus_type, 0) 101 #define DRIVER_ROOT_ID DRIVER_ROOTBUS_ID(DRVMGR_BUS_TYPE_ROOT) 104 #define DRIVER_PCIBUS_ID DRIVER_ROOTBUS_ID(DRVMGR_BUS_TYPE_PCI) 107 #define DRIVER_GRLIB_AMBAPP_ID DRIVER_ROOTBUS_ID(DRVMGR_BUS_TYPE_AMBAPP) 110 #define DRIVER_LEON2_AMBA_ID DRIVER_ROOTBUS_ID(DRVMGR_BUS_TYPE_LEON2_AMBA) 113 #define DRIVER_AMBAPP_DIST_ID DRIVER_ROOTBUS_ID(DRVMGR_BUS_TYPE_AMBAPP_DIST) 125 typedef void (*drvmgr_isr)(
void *arg);
130 int (*init[DRVMGR_LEVEL_MAX])(
struct drvmgr_bus *);
135 int (*int_register)(
struct drvmgr_dev *,
int index,
const char *info, drvmgr_isr isr,
void *arg);
136 int (*int_unregister)(
struct drvmgr_dev *,
int index, drvmgr_isr isr,
void *arg);
137 int (*int_clear)(
struct drvmgr_dev *,
int index);
138 int (*int_mask)(
struct drvmgr_dev *,
int index);
139 int (*int_unmask)(
struct drvmgr_dev *,
int index);
144 int (*get_freq)(
struct drvmgr_dev*, int,
unsigned int*);
149 void (*print)(
void *p,
char *str),
void *p);
151 #define BUS_OPS_NUM (sizeof(struct drvmgr_bus_ops)/sizeof(void (*)(void))) 157 #define DRVMGR_FUNC(_ID_, _FUNC_) {(int)(_ID_), (void *)(_FUNC_)} 158 #define DRVMGR_FUNC_END {0, NULL} 177 DRVMGR_KT_STRING = 2,
178 DRVMGR_KT_POINTER = 3,
181 #define DRVMGR_KEY_EMPTY {NULL, DRVMGR_KT_NONE, {0}} 182 #define DRVMGR_RES_EMPTY {0, 0, NULL} 183 #define MMAP_EMPTY {0, 0, 0} 195 enum drvmgr_kt key_type;
228 #define DRVMGR_TRANSLATE_ONE2ONE NULL 229 #define DRVMGR_TRANSLATE_NO_BRIDGE ((void *)1) 234 unsigned char bus_type;
254 #define BUS_STATE_INIT_FAILED 0x00000001 255 #define BUS_STATE_LIST_INACTIVE 0x00001000 256 #define BUS_STATE_DEPEND_FAILED 0x00000004 259 #define DEV_STATE_INIT_FAILED 0x00000001 260 #define DEV_STATE_INIT_DONE 0x00000002 261 #define DEV_STATE_DEPEND_FAILED 0x00000004 262 #define DEV_STATE_UNITED 0x00000100 263 #define DEV_STATE_REMOVED 0x00000200 264 #define DEV_STATE_IGNORED 0x00000400 267 #define DEV_STATE_LIST_INACTIVE 0x00001000 295 int (*info)(
struct drvmgr_dev *, void (*print)(
void *p,
char *str),
void *p,
int,
char *argv[]);
297 #define DRVMGR_OPS_NUM(x) (sizeof(x)/sizeof(void (*)(void))) 310 unsigned int dev_cnt;
311 unsigned int dev_priv_size;
365 extern void drvmgr_init_update(
void);
402 extern int drvmgr_dev_drv_separate(
struct drvmgr_dev *dev);
462 enum drvmgr_kt key_type);
479 enum drvmgr_kt key_type);
514 #define DRVMGR_FED_BF 1 515 #define DRVMGR_FED_DF 0 516 extern int drvmgr_for_each_dev(
517 int (*func)(
struct drvmgr_dev *dev,
void *arg),
543 unsigned int *freq_hz);
651 CPUMEM_FROM_DMA = 0x1,
667 DMAMEM_FROM_CPU = 0x3,
669 #define DRVMGR_TR_REVERSE 0x1 670 #define DRVMGR_TR_PATH 0x2 710 unsigned int options,
733 extern unsigned int drvmgr_translate_bus(
748 extern int drvmgr_translate_check(
750 unsigned int options,
762 extern int drvmgr_func_call(
void *obj,
int funcid,
void *a,
void *b,
void *c,
void *d);
768 #define DRVMGR_FUNCID(major, minor) ((((major) & 0xfff) << 20) | ((minor) & 0xfffff)) 769 #define DRVMGR_FUNCID_NONE 0 770 #define DRVMGR_FUNCID_END DRVMGR_FUNCID(DRVMGR_FUNCID_NONE, 0) 779 #define RW_SIZE_1 0x00001 780 #define RW_SIZE_2 0x00002 781 #define RW_SIZE_4 0x00004 782 #define RW_SIZE_8 0x00008 783 #define RW_SIZE_ANY 0x00000 784 #define RW_SIZE(id) ((unsigned int)(id) & 0xf) 786 #define RW_DIR_ANY 0x00000 787 #define RW_READ 0x00000 788 #define RW_WRITE 0x00010 789 #define RW_SET 0x00020 790 #define RW_DIR(id) (((unsigned int)(id) >> 4) & 0x3) 792 #define RW_RAW 0x00000 793 #define RW_LITTLE 0x00040 794 #define RW_BIG 0x00080 795 #define RW_ENDIAN(id) (((unsigned int)(id) >> 6) & 0x3) 797 #define RW_TYPE_ANY 0x00000 798 #define RW_REG 0x00100 799 #define RW_MEM 0x00200 800 #define RW_MEMREG 0x00300 801 #define RW_CFG 0x00400 802 #define RW_TYPE(id) (((unsigned int)(id) >> 8) & 0xf) 804 #define RW_ARG 0x01000 805 #define RW_ERR 0x02000 808 #define DRVMGR_RWFUNC(minor) DRVMGR_FUNCID(FUNCID_RW, minor) 819 typedef uint8_t (*drvmgr_r8)(uint8_t *srcadr);
820 typedef uint16_t (*drvmgr_r16)(uint16_t *srcadr);
821 typedef uint32_t (*drvmgr_r32)(uint32_t *srcadr);
822 typedef uint64_t (*drvmgr_r64)(uint64_t *srcadr);
823 typedef void (*drvmgr_w8)(uint8_t *dstadr, uint8_t data);
824 typedef void (*drvmgr_w16)(uint16_t *dstadr, uint16_t data);
825 typedef void (*drvmgr_w32)(uint32_t *dstadr, uint32_t data);
826 typedef void (*drvmgr_w64)(uint64_t *dstadr, uint64_t data);
830 typedef int (*drvmgr_rmem)(
void *dest,
const void *src,
int n);
834 typedef int (*drvmgr_wmem)(
void *dest,
const void *src,
int n);
838 typedef int (*drvmgr_memset)(
void *dstadr,
int c,
size_t n);
841 typedef uint8_t (*drvmgr_r8_arg)(uint8_t *srcadr,
void *a);
842 typedef uint16_t (*drvmgr_r16_arg)(uint16_t *srcadr,
void *a);
843 typedef uint32_t (*drvmgr_r32_arg)(uint32_t *srcadr,
void *a);
844 typedef uint64_t (*drvmgr_r64_arg)(uint64_t *srcadr,
void *a);
845 typedef void (*drvmgr_w8_arg)(uint8_t *dstadr, uint8_t data,
void *a);
846 typedef void (*drvmgr_w16_arg)(uint16_t *dstadr, uint16_t data,
void *a);
847 typedef void (*drvmgr_w32_arg)(uint32_t *dstadr, uint32_t data,
void *a);
848 typedef void (*drvmgr_w64_arg)(uint64_t *dstadr, uint64_t data,
void *a);
849 typedef int (*drvmgr_rmem_arg)(
void *dest,
const void *src,
int n,
void *a);
850 typedef int (*drvmgr_wmem_arg)(
void *dest,
const void *src,
int n,
void *a);
851 typedef int (*drvmgr_memset_arg)(
void *dstadr,
int c,
size_t n,
void *a);
855 int funcid,
void *adr);
858 extern void drvmgr_rw_memset(
894 unsigned int state_set_mask,
895 unsigned int state_clr_mask,
896 int (*func)(
struct drvmgr_dev *dev,
void *arg),
900 #define PRINT_DEVS_FAILED 0x01 901 #define PRINT_DEVS_ASSIGNED 0x02 902 #define PRINT_DEVS_UNASSIGNED 0x04 903 #define PRINT_DEVS_IGNORED 0x08 904 #define PRINT_DEVS_ALL (PRINT_DEVS_FAILED | \ 905 PRINT_DEVS_ASSIGNED | \ 906 PRINT_DEVS_UNASSIGNED |\ 923 #define OPTION_DEV_GENINFO 0x00000001 924 #define OPTION_DEV_BUSINFO 0x00000002 925 #define OPTION_DEV_DRVINFO 0x00000004 926 #define OPTION_DRV_DEVS 0x00000100 927 #define OPTION_BUS_DEVS 0x00010000 928 #define OPTION_RECURSIVE 0x01000000 929 #define OPTION_INFO_ALL 0xffffffff 932 extern void drvmgr_info(
void *
id,
unsigned int options);
void drvmgr_info_buses(unsigned int options)
Get information about all buses in the system.
Definition: drvmgr_print.c:447
int drvmgr_children_unregister(struct drvmgr_bus *bus)
Unregister all child devices of a bus.
Definition: drvmgr_unregister.c:22
struct drvmgr_bus * parent
Bus that this device resides on.
Definition: drvmgr.h:278
void drvmgr_info(void *id, unsigned int options)
Print information about a driver manager object (device, driver, bus)
Definition: drvmgr_print.c:384
void drvmgr_info_drv(struct drvmgr_drv *drv, unsigned int options)
Get information about a driver.
Definition: drvmgr_print.c:347
int drvmgr_drv_register(struct drvmgr_drv *drv)
Register a driver.
Definition: drvmgr.c:348
int drvmgr_interrupt_unregister(struct drvmgr_dev *dev, int index, drvmgr_isr isr, void *arg)
Unregister an interrupt handler.
Definition: drvmgr_drvinf.c:97
void drvmgr_print_devs(unsigned int options)
Print devices with certain condictions met according to 'options'.
Definition: drvmgr_print.c:41
int drvmgr_interrupt_mask(struct drvmgr_dev *dev, int index)
Force masking/disable an interrupt on the interrupt controller, this is not normally performed since ...
Definition: drvmgr_drvinf.c:132
int drvmgr_dev_register(struct drvmgr_dev *dev)
Register a device.
Definition: drvmgr.c:475
Bus information.
Definition: drvmgr.h:233
void drvmgr_info_dev(struct drvmgr_dev *dev, unsigned int options)
Get information about a device.
Definition: drvmgr_print.c:238
Bus operations.
Definition: drvmgr.h:129
struct drvmgr_drv * next
Next Driver.
Definition: drvmgr.h:303
void bsp_driver_level_hook(int level)
This function must be defined by the BSP when the driver manager is enabled and initialized during BS...
#define RTEMS_INLINE_ROUTINE
The following (in conjunction with compiler arguments) are used to choose between the use of static i...
Definition: basedefs.h:135
drvmgr_tr_opts
drvmgr_translate() translation options
Definition: drvmgr.h:633
int state
Init State of Bus, BUS_STATE_*.
Definition: drvmgr.h:250
int drvmgr_func_get(void *obj, int funcid, void **func)
Get function pointer from Device Driver or Bus Driver.
Definition: drvmgr_func.c:14
void drvmgr_bus_res_add(struct drvmgr_bus *bus, struct drvmgr_bus_res *bres)
Add resources to a bus, typically used by a bus driver.
Definition: drvmgr.c:635
int drvmgr_freq_get(struct drvmgr_dev *dev, int options, unsigned int *freq_hz)
Get Bus frequency in Hertz.
Definition: drvmgr_drvinf.c:53
struct drvmgr_key * drvmgr_key_get(struct drvmgr_key *keys, char *key_name)
Return the one key that matches key name from a driver keys array.
Definition: drvmgr_res.c:55
void * priv
Private data structure used by BUS driver.
Definition: drvmgr.h:239
struct drvmgr_drv * drvmgr_drv_by_name(const char *name)
Get Driver by Driver Name.
Definition: drvmgr_by_name.c:16
Bus resource list node.
Definition: drvmgr.h:210
MAP entry.
Definition: drvmgr.h:221
RTEMS_INLINE_ROUTINE struct drvmgr_drv * drvmgr_get_drv(struct drvmgr_dev *dev)
Get Driver of device.
Definition: drvmgr.h:495
void drvmgr_print_topo(void)
Print device/bus topology.
Definition: drvmgr_print.c:97
void drvmgr_info_devs_on_bus(struct drvmgr_bus *bus, unsigned int options)
Get information about all devices on a bus.
Definition: drvmgr_print.c:398
int drvmgr_interrupt_clear(struct drvmgr_dev *dev, int index)
Clear (ACK) pending interrupt.
Definition: drvmgr_drvinf.c:112
int drvmgr_init(void)
Init driver manager all in one go, will call _DRV_Manager_initialization(), then _DRV_Manager_init_le...
Definition: drvmgr_init.c:16
struct drvmgr_dev * next_in_bus
Next device on the same bus.
Definition: drvmgr.h:274
int drvmgr_keys_get(struct drvmgr_dev *dev, struct drvmgr_key **keys)
Find all the resource keys for a device among all driver resources on a bus.
Definition: drvmgr_res.c:15
Device information.
Definition: drvmgr.h:271
int drvmgr_func_call(void *obj, int funcid, void *a, void *b, void *c, void *d)
Lookup function and call it directly with the four optional arguments.
Definition: drvmgr_func_call.c:14
void drvmgr_info_drvs(unsigned int options)
Get information about all drivers in the system.
Definition: drvmgr_print.c:434
Union of different values.
Definition: drvmgr.h:187
struct drvmgr_dev * next
Next device.
Definition: drvmgr.h:273
struct drvmgr_dev * drvmgr_dev_by_name(const char *name)
Get Device by Device Name.
Definition: drvmgr_dev_by_name.c:27
void _DRV_Manager_init_level(int level)
Take all devices into init level 'level', all devices registered later will directly be taken into th...
Definition: drvmgr.c:68
union drvmgr_key_value * drvmgr_key_val_get(struct drvmgr_key *keys, char *key_name, enum drvmgr_kt key_type)
Extract key value from the key in the keys array matching name and type.
Definition: drvmgr_res.c:73
void drvmgr_info_devs(unsigned int options)
Get information about all devices in the system (on all buses)
Definition: drvmgr_print.c:423
struct drvmgr_dev * next_in_drv
Next device using the same driver.
Definition: drvmgr.h:275
int drvmgr_get_dev_prefix(struct drvmgr_dev *dev, char *dev_prefix)
Get device name prefix, this name can be used to register a unique name in the bus->error filesystem ...
Definition: drvmgr_drvinf.c:65
int drvmgr_bus_register(struct drvmgr_bus *bus)
Register a bus.
Definition: drvmgr.c:570
void _DRV_Manager_initialization(void)
Initialize data structures of the driver management system.
Definition: drvmgr.c:85
char * dev_prefix
Optional name prefix.
Definition: drvmgr.h:122
RTEMS_INLINE_ROUTINE struct drvmgr_bus * drvmgr_get_parent(struct drvmgr_dev *dev)
Get parent bus.
Definition: drvmgr.h:485
int drvmgr_dev_unregister(struct drvmgr_dev *dev)
Remove a device, and all its children devices if device is a bus device.
Definition: drvmgr_unregister.c:151
int drvmgr_alloc_dev(struct drvmgr_dev **pdev, int extra)
Allocate a device structure, if no memory available rtems_error_fatal_occurred is called...
Definition: drvmgr.c:597
int drvmgr_get_dev(struct drvmgr_drv *drv, int minor, struct drvmgr_dev **pdev)
Get Device pointer from Driver and Driver minor number.
Definition: drvmgr_drvinf.c:28
void drvmgr_print_mem(void)
Print the memory usage Only accounts for data structures.
Definition: drvmgr_print.c:106
union drvmgr_key_value * drvmgr_dev_key_get(struct drvmgr_dev *dev, char *key_name, enum drvmgr_kt key_type)
Get key value from the bus resources matching [device, key name, key type] if no matching key is foun...
Definition: drvmgr_res.c:90
int drvmgr_for_each_listdev(struct drvmgr_list *devlist, unsigned int state_set_mask, unsigned int state_clr_mask, int(*func)(struct drvmgr_dev *dev, void *arg), void *arg)
Calls func() for every device found matching the search requirements of set_mask and clr_mask...
Definition: drvmgr_for_each_list_dev.c:15
void drvmgr_summary(void)
Print number of devices, buses and drivers.
Definition: drvmgr_print.c:182
unsigned int drvmgr_translate(struct drvmgr_dev *dev, unsigned int options, void *src_address, void **dst_address)
Translate an address on one bus to an address on another bus.
Definition: drvmgr_translate.c:130
int drvmgr_alloc_bus(struct drvmgr_bus **pbus, int extra)
Allocate a bus structure, if no memory available rtems_error_fatal_occurred is called.
Definition: drvmgr.c:616
int drvmgr_interrupt_unmask(struct drvmgr_dev *dev, int index)
Force unmasking/enableing an interrupt on the interrupt controller, this is not normally used...
Definition: drvmgr_drvinf.c:122
Driver resource entry, Driver resources for a certain device instance, containing a number of keys wh...
Definition: drvmgr.h:203
Driver operations, function pointers.
Definition: drvmgr.h:293
Device driver description.
Definition: drvmgr.h:301
void * priv
Pointer to driver private device structure.
Definition: drvmgr.h:282
int level
Initialization Level of Bus.
Definition: drvmgr.h:249
int drvmgr_on_rootbus(struct drvmgr_dev *dev)
Return 0 if dev is not located on the root bus, 1 if on root bus.
Definition: drvmgr_drvinf.c:142
void(* drvmgr_drv_reg_func)(void)
Structure defines a function pointer called when driver manager is ready for drivers to register them...
Definition: drvmgr.h:319
struct drvmgr_drv * drvmgr_drv_by_id(uint64_t id)
Get Driver by Driver ID.
Definition: drvmgr_by_id.c:15
struct drvmgr_drv * drv
The driver owning this device.
Definition: drvmgr.h:277
char * name
Name of Device Hardware.
Definition: drvmgr.h:281
struct drvmgr_bus * next
Next Bus.
Definition: drvmgr.h:237
Bus parameters used by driver interface functions to aquire information about bus.
Definition: drvmgr.h:121
void drvmgr_info_bus(struct drvmgr_bus *bus, unsigned int options)
Get information about a bus.
Definition: drvmgr_print.c:301
int drvmgr_bus_unregister(struct drvmgr_bus *bus)
Unregister a bus.
Definition: drvmgr_unregister.c:44
int drvmgr_interrupt_register(struct drvmgr_dev *dev, int index, const char *info, drvmgr_isr isr, void *arg)
Register a shared interrupt handler.
Definition: drvmgr_drvinf.c:80
struct drvmgr_bus_res * next
Next resource node in list.
Definition: drvmgr.h:211
List description, Singly link list with head and tail pointers.
Definition: drvmgr_list.h:25
int error
Return code from bus->ops->initN()
Definition: drvmgr.h:251
int drvmgr_root_drv_register(struct drvmgr_drv *drv)
Register Root Bus device driver.
Definition: drvmgr.c:319