ARPDAS_QNX6 1.0
|
00001 #ifndef SUBBUSD_H_INCLUDED 00002 #define SUBBUSD_H_INCLUDED 00003 #include <sys/iomsg.h> 00004 #include <sys/siginfo.h> 00005 #include "subbus.h" 00006 00007 #define SUBBUSD_MGRID_OFFSET 1 00008 #define SUBBUSD_MGRID (_IOMGR_PRIVATE_BASE + SUBBUSD_MGRID_OFFSET) 00009 00010 #define SUBBUS_NAME_MAX 80 00011 #define CardID_MAX 32 00012 00013 /* 00014 * Limit definition to what is strictly required 00015 * Convenience functions will remain in the library. 00016 * Interface between the library and the driver will 00017 * use a structure defined here. Encoding into ASCII 00018 * will only happen when translating to a serial 00019 * platform. 00020 */ 00021 00022 typedef struct __attribute__((__packed__)) { 00023 struct _io_msg iohdr; 00024 unsigned short sb_kw; 00025 unsigned short command; 00026 } subbusd_req_hdr_t; 00027 00028 /* sb_kw value */ 00029 #define SB_KW 0x7362 00030 00031 /* command values */ 00032 #define SBC_READACK 0 00033 #define SBC_WRITEACK 1 00034 #define SBC_SETCMDENBL 2 00035 #define SBC_SETCMDSTRB 3 00036 #define SBC_READSW 4 00037 #define SBC_SETFAIL 5 00038 #define SBC_READFAIL 6 00039 #define SBC_TICK 7 00040 #define SBC_DISARM 8 00041 #define SBC_GETCAPS 9 00042 #define SBC_INTATT 10 00043 #define SBC_INTDET 11 00044 #define SBC_READCACHE 12 00045 #define SBC_WRITECACHE 13 00046 #define SBC_QUIT 14 00047 #define SBC_MREAD 15 00048 00049 typedef struct __attribute__((__packed__)) { 00050 unsigned short address; 00051 unsigned short data; 00052 } subbusd_req_data0; 00053 00054 typedef struct __attribute__((__packed__)) { 00055 unsigned short data; 00056 } subbusd_req_data1; 00057 00058 typedef struct __attribute__((__packed__)) { 00059 char cardID[CardID_MAX]; 00060 unsigned short address; 00061 unsigned short region; 00062 struct sigevent event; 00063 } subbusd_req_data2; 00064 00065 typedef struct __attribute__((__packed__)) { 00066 char cardID[CardID_MAX]; 00067 } subbusd_req_data3; 00068 00069 typedef struct __attribute__((__packed__)) { 00070 subbusd_req_hdr_t sbhdr; 00071 union { 00072 subbusd_req_data0 d0; 00073 subbusd_req_data1 d1; 00074 subbusd_req_data2 d2; 00075 subbusd_req_data3 d3; 00076 subbus_mread_req d4; 00077 } data; 00078 } subbusd_req_t; 00079 00080 typedef struct __attribute__((__packed__)) { 00081 unsigned short subfunc; 00082 unsigned short features; 00083 char name[SUBBUS_NAME_MAX]; 00084 } subbusd_cap_t; 00085 00086 #define SB_MAX_MREAD 256 00087 /** 00088 * We need one or two shorts per read, depending on 00089 * whether we want acknowledge info or not. 00090 */ 00091 typedef struct __attribute__((__packed__)) { 00092 unsigned short n_reads; 00093 unsigned short rvals[2*SB_MAX_MREAD]; 00094 } subbusd_mread_t; 00095 00096 typedef struct __attribute__((__packed__)) { 00097 signed short status; 00098 unsigned short ret_type; 00099 } subbusd_rep_hdr_t; 00100 00101 typedef struct __attribute__((__packed__)) { 00102 subbusd_rep_hdr_t hdr; 00103 union { 00104 unsigned short value; 00105 subbusd_cap_t capabilities; 00106 subbusd_mread_t mread; 00107 } data; 00108 } subbusd_rep_t; 00109 00110 /* status values. Status values less than zero are errors */ 00111 #define SBS_OK 0 00112 #define SBS_ACK 1 00113 #define SBS_NOACK 2 00114 #define SBS_REQ_SYNTAX (-1) 00115 #define SBS_RESP_SYNTAX (-2) 00116 #define SBS_RESP_ERROR (-3) 00117 #define SBS_TIMEOUT (-4) 00118 00119 /* ret_type values */ 00120 #define SBRT_NONE 0 // Just return the status 00121 #define SBRT_US 1 // Return unsigned short value 00122 #define SBRT_CAP 2 // Capabilities 00123 #define SBRT_MREAD 3 // Multi-Read 00124 #define SBRT_MREADACK 4 // Multi-Read w/ACK 00125 00126 00127 #endif