ARPDAS_QNX6 1.0
subbusd.h
Go to the documentation of this file.
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
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Defines