Changeset 3843ecb in mainline for uspace/lib/libc
- Timestamp:
- 2010-04-09T13:54:06Z (15 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 892e4e1
- Parents:
- 3a5909f
- Location:
- uspace/lib/libc
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/libc/generic/device/hw_res.c
r3a5909f r3843ecb 37 37 #include <async.h> 38 38 #include <malloc.h> 39 40 39 41 40 bool get_hw_resources(int dev_phone, hw_resource_list_t *hw_resources) 42 41 { 43 42 ipcarg_t count = 0; 44 int rc = async_req_1_1(dev_phone, HW_RES_DEV_IFACE, GET_RESOURCE_LIST, &count);43 int rc = async_req_1_1(dev_phone, DEV_IFACE_ID(HW_RES_DEV_IFACE), GET_RESOURCE_LIST, &count); 45 44 hw_resources->count = count; 46 45 if (EOK != rc) { … … 66 65 bool enable_interrupt(int dev_phone) 67 66 { 68 int rc = async_req_1_0(dev_phone, HW_RES_DEV_IFACE, ENABLE_INTERRUPT);67 int rc = async_req_1_0(dev_phone, DEV_IFACE_ID(HW_RES_DEV_IFACE), ENABLE_INTERRUPT); 69 68 return rc == EOK; 70 69 } -
uspace/lib/libc/include/device/hw_res.h
r3a5909f r3843ecb 39 39 #include <bool.h> 40 40 41 /** HW resource (e.g. interrupt, memory register, i/o register etc.). */ 42 typedef struct hw_resource { 43 hw_res_type_t type; 44 union { 45 struct { 46 uint64_t address; 47 endianness_t endianness; 48 size_t size; 49 } mem_range; 50 struct { 51 uint64_t address; 52 endianness_t endianness; 53 size_t size; 54 } io_range; 55 struct { 56 int irq; 57 } interrupt; 58 } res; 59 } hw_resource_t; 60 61 typedef struct hw_resource_list { 62 size_t count; 63 hw_resource_t *resources; 64 } hw_resource_list_t; 65 66 static inline void clean_hw_resource_list(hw_resource_list_t *hw_res) 67 { 68 if(NULL != hw_res->resources) { 69 free(hw_res->resources); 70 hw_res->resources = NULL; 71 } 72 hw_res->count = 0; 73 } 74 41 75 42 76 bool get_hw_resources(int dev_phone, hw_resource_list_t *hw_resources); -
uspace/lib/libc/include/ipc/dev_iface.h
r3a5909f r3843ecb 35 35 #include <libarch/types.h> 36 36 37 #define DEV_IFACE_FIRST IPC_FIRST_USER_METHOD38 39 37 typedef enum { 40 HW_RES_DEV_IFACE = DEV_IFACE_FIRST,38 HW_RES_DEV_IFACE = 0, 41 39 // TODO add more interfaces 42 40 DEV_IFACE_MAX 43 } dev_inferface_id _t;41 } dev_inferface_idx_t; 44 42 43 #define DEV_IFACE_ID(idx) ((idx) + IPC_FIRST_USER_METHOD) 44 #define DEV_IFACE_IDX(id) ((id) - IPC_FIRST_USER_METHOD) 45 45 46 #define DEV_IFACE_COUNT (DEV_IFACE_MAX - DEV_IFACE_FIRST)46 #define DEV_IFACE_COUNT DEV_IFACE_MAX 47 47 48 49 // data types related to some interface - TODO move this to separate header files50 48 51 49 … … 69 67 } endianness_t; 70 68 71 /** HW resource (e.g. interrupt, memory register, i/o register etc.). */72 typedef struct hw_resource {73 hw_res_type_t type;74 union {75 struct {76 uint64_t address;77 endianness_t endianness;78 size_t size;79 } mem_range;80 struct {81 uint64_t address;82 endianness_t endianness;83 size_t size;84 } io_range;85 struct {86 int irq;87 } interrupt;88 } res;89 } hw_resource_t;90 91 typedef struct hw_resource_list {92 size_t count;93 hw_resource_t *resources;94 } hw_resource_list_t;95 96 static inline void clean_hw_resource_list(hw_resource_list_t *hw_res)97 {98 if(NULL != hw_res->resources) {99 free(hw_res->resources);100 hw_res->resources = NULL;101 }102 hw_res->count = 0;103 }104 105 69 #endif
Note:
See TracChangeset
for help on using the changeset viewer.