1 /**************************************************************************** 2 3 __ __ V/\V. /\ 4 |" | |" | mMMnw, || [] 5 | | | | (o o)W () || || 6 |__|_|_"| | / |Mw || ||// 7 (" " \| \ -'_/mw \\||/ 8 \______) ~%%/WM" \|| 9 _____ ___ ______ _____ __ _____ ___ __ __/~~__ ~~\ _|| 10 |"(" \()/\" \ ()/"_ )|"(___) ) )|"(" \ ()/\" \(__)/" ) /" ) " \ /_)O 11 | ) )/" \ \ (_/"\__/ | )_ ( ( | )_ ) /" \ \ / /|/ / ·\ \/ ,|O 12 | (___/( (_\__) _\ \_ | (__) ) )| (__) |( (_\__)/ /"/ / |\ '_|O 13 | | _ \ / / /" \_/ ) | ")__ ( ( | )" ) \ / // /|/ / . .|/\__/ || 14 |__| (_) \/__/ (______/ |_(___) )_)|_(___/ . \/__/(__/ (__/ .:.:| || 15 _____ 16 |" __ \ Poseidon -- The divine USB stack for Amiga computers 17 | (__) ) Version: 4.2 (31.08.08) 18 | __ ( Designed and written by 19 |"(__) ) Chris Hodges <chrisly@platon42.de> 20 |_____/ Copyright ©2002-2008 Chris Hodges. All rights reserved. 21 22 ****************************************************************************/ 23 24 /* 25 *---------------------------------------------------------------------------- 26 * Includes for poseidon.library 27 *---------------------------------------------------------------------------- 28 * By Chris Hodges <chrisly@platon42.de> 29 * 30 */ 31 32 #ifndef LIBRARIES_POSEIDON_H 33 #define LIBRARIES_POSEIDON_H 34 35 #include <devices/usbhardware.h> 36 #include <devices/timer.h> 37 #include <exec/types.h> 38 #include <exec/libraries.h> 39 #include <exec/semaphores.h> 40 #include <exec/errors.h> 41 #include <dos/dos.h> 42 #include <utility/tagitem.h> 43 #include <utility/pack.h> 44 #include <libraries/iffparse.h> 45 46 /* Types for psdGetAttrs() and psdSetAttrs() */ 47 #define PGA_STACK 0x01 48 #define PGA_USBCLASS 0x02 49 #define PGA_HARDWARE 0x03 50 #define PGA_DEVICE 0x04 51 #define PGA_CONFIG 0x05 52 #define PGA_INTERFACE 0x06 53 #define PGA_ENDPOINT 0x07 54 #define PGA_ERRORMSG 0x08 55 #define PGA_PIPE 0x09 56 #define PGA_APPBINDING 0x0a 57 #define PGA_EVENTNOTE 0x0b 58 #define PGA_STACKCFG 0x0c 59 #define PGA_PIPESTREAM 0x0d 60 #define PGA_DESCRIPTOR 0x0e 61 #define PGA_RTISO 0x0f 62 #define PGA_LAST 0x0f 63 64 /* Tags for psdGetAttrs(PGA_STACK,...) */ 65 #define PA_Dummy (TAG_USER + 2612) 66 #define PA_ConfigRead (PA_Dummy + 0x01) 67 #define PA_HardwareList (PA_Dummy + 0x20) 68 #define PA_ClassList (PA_Dummy + 0x21) 69 #define PA_ErrorMsgList (PA_Dummy + 0x22) 70 #define PA_GlobalConfig (PA_Dummy + 0x44) 71 #define PA_CurrConfigHash (PA_Dummy + 0x45) 72 #define PA_SavedConfigHash (PA_Dummy + 0x46) 73 #define PA_MemPoolUsage (PA_Dummy + 0x50) 74 #define PA_ReleaseVersion (PA_Dummy + 0x60) 75 #define PA_OSVersion (PA_Dummy + 0x61) 76 77 /* Tags for psdGetAttrs(PGA_ERRORMSG,...) */ 78 #define EMA_Dummy (TAG_USER + 103) 79 #define EMA_Level (EMA_Dummy + 0x10) 80 #define EMA_Origin (EMA_Dummy + 0x11) 81 #define EMA_Msg (EMA_Dummy + 0x12) 82 #define EMA_DateStamp (EMA_Dummy + 0x13) 83 84 /* Tags for psdGetAttrs(PGA_USBCLASS,...) */ 85 86 #define UCA_Dummy (TAG_USER + 4489) 87 #define UCA_ClassBase (UCA_Dummy + 0x10) 88 #define UCA_ClassName (UCA_Dummy + 0x11) 89 #define UCA_UseCount (UCA_Dummy + 0x12) 90 #define UCA_FullPath (UCA_Dummy + 0x13) 91 92 /* Tags for psdGetAttrs(PGA_HARDWARE,...) */ 93 #define HA_Dummy (TAG_USER + 0x2612) 94 #define HA_DeviceName (HA_Dummy + 0x10) 95 #define HA_DeviceUnit (HA_Dummy + 0x11) 96 #define HA_ProductName (HA_Dummy + 0x12) 97 #define HA_Manufacturer (HA_Dummy + 0x13) 98 #define HA_Version (HA_Dummy + 0x14) 99 #define HA_Revision (HA_Dummy + 0x15) 100 #define HA_Description (HA_Dummy + 0x16) 101 #define HA_Copyright (HA_Dummy + 0x17) 102 #define HA_DriverVersion (HA_Dummy + 0x18) 103 #define HA_DeviceList (HA_Dummy + 0x20) 104 105 /* Tags for psdGetAttrs(PGA_DEVICE,...) */ 106 #define DA_Dummy (TAG_USER + 42) 107 #define DA_IsLowspeed (DA_Dummy + 0x01) 108 #define DA_IsConnected (DA_Dummy + 0x02) 109 #define DA_HasAddress (DA_Dummy + 0x03) 110 #define DA_HasDevDesc (DA_Dummy + 0x04) 111 #define DA_IsConfigured (DA_Dummy + 0x05) 112 #define DA_HasAppBinding (DA_Dummy + 0x06) 113 #define DA_IsHighspeed (DA_Dummy + 0x07) 114 #define DA_IsDead (DA_Dummy + 0x08) 115 #define DA_Config (DA_Dummy + 0x09) 116 #define DA_IsSuspended (DA_Dummy + 0x0a) 117 #define DA_Address (DA_Dummy + 0x10) 118 #define DA_NumConfigs (DA_Dummy + 0x11) 119 #define DA_CurrConfig (DA_Dummy + 0x12) 120 #define DA_HubDevice (DA_Dummy + 0x13) 121 #define DA_UsbVersion (DA_Dummy + 0x14) 122 #define DA_Class (DA_Dummy + 0x15) 123 #define DA_SubClass (DA_Dummy + 0x16) 124 #define DA_Protocol (DA_Dummy + 0x17) 125 #define DA_Version (DA_Dummy + 0x18) 126 #define DA_VendorID (DA_Dummy + 0x19) 127 #define DA_ProductID (DA_Dummy + 0x1a) 128 #define DA_Manufacturer (DA_Dummy + 0x1b) 129 #define DA_ProductName (DA_Dummy + 0x1c) 130 #define DA_SerialNumber (DA_Dummy + 0x1d) 131 #define DA_Hardware (DA_Dummy + 0x1e) 132 #define DA_Binding (DA_Dummy + 0x1f) 133 #define DA_ConfigList (DA_Dummy + 0x20) 134 #define DA_LangIDArray (DA_Dummy + 0x21) 135 #define DA_CurrLangID (DA_Dummy + 0x22) 136 #define DA_BindingClass (DA_Dummy + 0x23) 137 #define DA_IDString (DA_Dummy + 0x24) 138 #define DA_CloneCount (DA_Dummy + 0x25) 139 #define DA_AtHubPortNumber (DA_Dummy + 0x26) 140 #define DA_NeedsSplitTrans (DA_Dummy + 0x27) 141 #define DA_OrigProductName (DA_Dummy + 0x28) 142 #define DA_DescriptorList (DA_Dummy + 0x29) 143 #define DA_MaxPktSize0 (DA_Dummy + 0x2a) 144 #define DA_HubThinkTime (DA_Dummy + 0x2b) 145 #define DA_PowerSupply (DA_Dummy + 0x30) 146 #define DA_PowerDrained (DA_Dummy + 0x31) 147 #define DA_LowPower (DA_Dummy + 0x32) 148 #define DA_InhibitPopup (DA_Dummy + 0x40) 149 #define DA_IsNewToMe (DA_Dummy + 0x41) 150 #define DA_InhibitClassBind (DA_Dummy + 0x42) 151 #define DA_OverridePowerInfo (DA_Dummy + 0x43) 152 153 /* Tags for psdGetAttrs(PGA_CONFIG,...) */ 154 #define CA_Dummy (TAG_USER + 23) 155 #define CA_Attrs (CA_Dummy + 0x01) 156 #define CA_SelfPowered (CA_Dummy + 0x02) 157 #define CA_RemoteWakeup (CA_Dummy + 0x03) 158 #define CA_ConfigNum (CA_Dummy + 0x10) 159 #define CA_MaxPower (CA_Dummy + 0x11) 160 #define CA_ConfigName (CA_Dummy + 0x12) 161 #define CA_NumInterfaces (CA_Dummy + 0x13) 162 #define CA_Device (CA_Dummy + 0x14) 163 #define CA_InterfaceList (CA_Dummy + 0x20) 164 165 /* Tags for psdGetAttrs(PGA_DESCRIPTOR,...) */ 166 #define DDA_Dummy (TAG_USER + 888) 167 #define DDA_Device (DDA_Dummy + 0x01) 168 #define DDA_Config (DDA_Dummy + 0x02) 169 #define DDA_Interface (DDA_Dummy + 0x03) 170 #define DDA_Endpoint (DDA_Dummy + 0x04) 171 #define DDA_Name (DDA_Dummy + 0x08) 172 #define DDA_DescriptorType (DDA_Dummy + 0x10) 173 #define DDA_DescriptorData (DDA_Dummy + 0x11) 174 #define DDA_DescriptorLength (DDA_Dummy + 0x12) 175 #define DDA_CS_SubType (DDA_Dummy + 0x20) 176 177 /* Tags for psdGetAttrs(PGA_INTERFACE,...) */ 178 #define IFA_Dummy (TAG_USER + 4711) 179 #define IFA_InterfaceNum (IFA_Dummy + 0x10) 180 #define IFA_AlternateNum (IFA_Dummy + 0x11) 181 #define IFA_Class (IFA_Dummy + 0x12) 182 #define IFA_SubClass (IFA_Dummy + 0x13) 183 #define IFA_Protocol (IFA_Dummy + 0x14) 184 #define IFA_InterfaceName (IFA_Dummy + 0x15) 185 #define IFA_Config (IFA_Dummy + 0x16) 186 #define IFA_Binding (IFA_Dummy + 0x17) 187 #define IFA_NumEndpoints (IFA_Dummy + 0x18) 188 #define IFA_BindingClass (IFA_Dummy + 0x19) 189 #define IFA_IDString (IFA_Dummy + 0x1a) 190 #define IFA_EndpointList (IFA_Dummy + 0x20) 191 #define IFA_AlternateIfList (IFA_Dummy + 0x21) 192 193 /* Tags for psdGetAttrs(PGA_ENDPOINT,...) */ 194 #define EA_Dummy (TAG_USER + 1138) 195 #define EA_IsIn (EA_Dummy + 0x01) 196 #define EA_EndpointNum (EA_Dummy + 0x10) 197 #define EA_TransferType (EA_Dummy + 0x11) 198 #define EA_MaxPktSize (EA_Dummy + 0x12) 199 #define EA_Interval (EA_Dummy + 0x13) 200 #define EA_Interface (EA_Dummy + 0x14) 201 #define EA_NumTransMuFrame (EA_Dummy + 0x15) 202 #define EA_SyncType (EA_Dummy + 0x16) 203 #define EA_UsageType (EA_Dummy + 0x17) 204 205 /* Tags for psdGetAttrs(PGA_PIPE,...) */ 206 #define PPA_Dummy (TAG_USER + 1234) 207 #define PPA_Endpoint (PPA_Dummy + 0x01) 208 #define PPA_Error (PPA_Dummy + 0x02) 209 #define PPA_Actual (PPA_Dummy + 0x03) 210 #define PPA_EndpointNum (PPA_Dummy + 0x04) 211 #define PPA_DeviceAddress (PPA_Dummy + 0x05) 212 #define PPA_IORequest (PPA_Dummy + 0x06) 213 #define PPA_NoZeroPktTerm (PPA_Dummy + 0x07) 214 #define PPA_NoShortPackets PPA_NoZeroPktTerm /* obsolete, bad naming */ 215 #define PPA_NakTimeout (PPA_Dummy + 0x08) 216 #define PPA_NakTimeoutTime (PPA_Dummy + 0x09) 217 #define PPA_AllowRuntPackets (PPA_Dummy + 0x0a) 218 #define PPA_MaxPktSize (PPA_Dummy + 0x0b) 219 #define PPA_Interval (PPA_Dummy + 0x0c) 220 221 /* Tags for application binding and psdGetAttrs(PGA_APPBINDING,...)*/ 222 #define ABA_Dummy (TAG_USER + 666) 223 #define ABA_ReleaseHook (ABA_Dummy + 0x01) 224 #define ABA_Device (ABA_Dummy + 0x02) 225 #define ABA_UserData (ABA_Dummy + 0x03) 226 #define ABA_Task (ABA_Dummy + 0x04) 227 #define ABA_ForceRelease (ABA_Dummy + 0x10) 228 229 /* Tags for psdGetAttrs(PGA_EVENTNOTE,...)*/ 230 #define ENA_Dummy (TAG_USER + 777) 231 #define ENA_EventID (ENA_Dummy + 0x01) 232 #define ENA_Param1 (ENA_Dummy + 0x02) 233 #define ENA_Param2 (ENA_Dummy + 0x03) 234 235 /* Tags for psdGetAttrs(PGA_GLOBALCFG,...) */ 236 #define GCA_Dummy (TAG_USER + 0x1138) 237 #define GCA_LogInfo (GCA_Dummy + 0x01) 238 #define GCA_LogWarning (GCA_Dummy + 0x02) 239 #define GCA_LogError (GCA_Dummy + 0x03) 240 #define GCA_LogFailure (GCA_Dummy + 0x04) 241 #define GCA_SubTaskPri (GCA_Dummy + 0x10) 242 #define GCA_BootDelay (GCA_Dummy + 0x11) 243 #define GCA_PopupDeviceNew (GCA_Dummy + 0x20) 244 #define GCA_PopupDeviceGone (GCA_Dummy + 0x21) 245 #define GCA_PopupDeviceDeath (GCA_Dummy + 0x22) 246 #define GCA_PopupCloseDelay (GCA_Dummy + 0x23) 247 #define GCA_PopupActivateWin (GCA_Dummy + 0x30) 248 #define GCA_PopupWinToFront (GCA_Dummy + 0x31) 249 #define GCA_InsertionSound (GCA_Dummy + 0x40) 250 #define GCA_RemovalSound (GCA_Dummy + 0x41) 251 #define GCA_HWKludge (GCA_Dummy + 0x50) 252 #define GCA_AutoDisableLP (GCA_Dummy + 0x60) 253 #define GCA_AutoDisableDead (GCA_Dummy + 0x61) 254 #define GCA_AutoCheckUpdate (GCA_Dummy + 0x62) 255 #define GCA_AutoRestartDead (GCA_Dummy + 0x63) 256 #define GCA_PowerSaving (GCA_Dummy + 0x64) 257 #define GCA_ForceSuspend (GCA_Dummy + 0x65) 258 #define GCA_SuspendTimeout (GCA_Dummy + 0x66) 259 #define GCA_PrefsVersion (GCA_Dummy + 0x70) 260 261 /* Tags for psdGetAttrs(PGA_PIPESTREAM,...) */ 262 #define PSA_Dummy (TAG_USER + 0x0409) 263 #define PSA_MessagePort (PSA_Dummy + 0x01) 264 #define PSA_AsyncIO (PSA_Dummy + 0x02) 265 #define PSA_NumPipes (PSA_Dummy + 0x03) 266 #define PSA_BufferSize (PSA_Dummy + 0x04) 267 #define PSA_ShortPktTerm (PSA_Dummy + 0x05) 268 #define PSA_ReadAhead (PSA_Dummy + 0x06) 269 #define PSA_BufferedRead (PSA_Dummy + 0x07) 270 #define PSA_BufferedWrite (PSA_Dummy + 0x08) 271 #define PSA_NoZeroPktTerm (PSA_Dummy + 0x09) 272 #define PSA_NakTimeout (PSA_Dummy + 0x0a) 273 #define PSA_NakTimeoutTime (PSA_Dummy + 0x0b) 274 #define PSA_AllowRuntPackets (PSA_Dummy + 0x0c) 275 #define PSA_TermArray (PSA_Dummy + 0x0d) 276 #define PSA_DoNotWait (PSA_Dummy + 0x0e) 277 #define PSA_AbortSigMask (PSA_Dummy + 0x0f) 278 #define PSA_BytesPending (PSA_Dummy + 0x10) 279 #define PSA_Error (PSA_Dummy + 0x11) 280 #define PSA_ActivePipe (PSA_Dummy + 0x12) 281 282 /* Tags for psdGetAttrs(PGA_RTISO,...) */ 283 #define RTA_Dummy (TAG_USER + 999) 284 #define RTA_InRequestHook (RTA_Dummy + 0x01) 285 #define RTA_OutRequestHook (RTA_Dummy + 0x02) 286 #define RTA_InDoneHook (RTA_Dummy + 0x03) 287 #define RTA_OutDoneHook (RTA_Dummy + 0x04) 288 #define RTA_ReleaseHook (RTA_Dummy + 0x05) 289 #define RTA_OutPrefetchSize (RTA_Dummy + 0x10) 290 291 /* NumToStr types */ 292 #define NTS_IOERR 1 293 #define NTS_LANGID 2 294 #define NTS_TRANSTYPE 3 295 #define NTS_VENDORID 4 296 #define NTS_CLASSCODE 5 297 #define NTS_DESCRIPTOR 6 298 #define NTS_SYNCTYPE 7 299 #define NTS_USAGETYPE 8 300 #define NTS_COMBOCLASS 9 301 302 /* NTS_COMBOCLASS flags */ 303 #define NTSCCS_CLASS 0 /* Class field is bits 0-7 */ 304 #define NTSCCS_SUBCLASS 8 /* Subclass field is bits 8-15 */ 305 #define NTSCCS_PROTO 16 /* Protocol field is bits 16-24 */ 306 #define NTSCCF_CLASS (1<<24) /* Class field is valid */ 307 #define NTSCCF_SUBCLASS (1<<25) /* Subclass field is valid */ 308 #define NTSCCF_PROTO (1<<26) /* Protocol field is valid */ 309 310 /* Event Handler stuff */ 311 #define EHMB_ADDHARDWARE 0x01 /* Param1 = phw */ 312 #define EHMB_REMHARDWARE 0x02 /* Param1 = phw */ 313 #define EHMB_ADDDEVICE 0x03 /* Param1 = pd */ 314 #define EHMB_REMDEVICE 0x04 /* Param1 = pd */ 315 #define EHMB_ADDCLASS 0x05 /* Param1 = puc */ 316 #define EHMB_REMCLASS 0x06 /* Param1 = puc */ 317 #define EHMB_ADDBINDING 0x07 /* Param1 = pd */ 318 #define EHMB_REMBINDING 0x08 /* Param1 = pd */ 319 #define EHMB_ADDERRORMSG 0x09 /* Param1 = pem */ 320 #define EHMB_REMERRORMSG 0x0a /* Param1 = pem */ 321 #define EHMB_CONFIGCHG 0x0b /* Param1 = void */ 322 #define EHMB_DEVICEDEAD 0x0c /* Param1 = pd */ 323 #define EHMB_DEVICELOWPW 0x0d /* Param1 = pd */ 324 #define EHMB_DEVSUSPENDED 0x0e /* Param1 = pd */ 325 #define EHMB_DEVRESUMED 0x0f /* Param1 = pd */ 326 327 #define EHMF_ADDHARDWARE (1L<<EHMB_ADDHARDWARE) 328 #define EHMF_REMHARDWARE (1L<<EHMB_REMHARDWARE) 329 #define EHMF_ADDDEVICE (1L<<EHMB_ADDDEVICE) 330 #define EHMF_REMDEVICE (1L<<EHMB_REMDEVICE) 331 #define EHMF_ADDCLASS (1L<<EHMB_ADDCLASS) 332 #define EHMF_REMCLASS (1L<<EHMB_REMCLASS) 333 #define EHMF_ADDBINDING (1L<<EHMB_ADDBINDING) 334 #define EHMF_REMBINDING (1L<<EHMB_REMBINDING) 335 #define EHMF_ADDERRORMSG (1L<<EHMB_ADDERRORMSG) 336 #define EHMF_REMERRORMSG (1L<<EHMB_REMERRORMSG) 337 #define EHMF_CONFIGCHG (1L<<EHMB_CONFIGCHG) 338 #define EHMF_DEVICEDEAD (1L<<EHMB_DEVICEDEAD) 339 #define EHMF_DEVICELOWPW (1L<<EHMB_DEVICELOWPW) 340 #define EHMF_DEVSUSPENDED (1L<<EHMB_DEVSUSPENDED) 341 #define EHMF_DEVRESUMED (1L<<EHMB_DEVRESUMED) 342 343 /* Configuration stuff */ 344 345 #define IFFFORM_PSDCFG MAKE_ID('P','S','D','C') 346 #define IFFFORM_STACKCFG MAKE_ID('S','T','K','C') 347 #define IFFFORM_DEVICECFG MAKE_ID('D','E','V','C') 348 #define IFFFORM_CLASSCFG MAKE_ID('C','L','S','C') 349 #define IFFFORM_UHWDEVICE MAKE_ID('U','H','W','D') 350 #define IFFFORM_USBCLASS MAKE_ID('U','C','L','S') 351 #define IFFFORM_CLASSDATA MAKE_ID('G','C','P','D') 352 #define IFFFORM_DEVCFGDATA MAKE_ID('D','C','F','G') 353 #define IFFFORM_DEVCLSDATA MAKE_ID('D','C','P','D') 354 #define IFFFORM_IFCFGDATA MAKE_ID('I','C','F','G') 355 #define IFFFORM_IFCLSDATA MAKE_ID('I','C','P','D') 356 357 #define IFFCHNK_OWNER MAKE_ID('O','W','N','R') 358 #define IFFCHNK_NAME MAKE_ID('N','A','M','E') 359 #define IFFCHNK_UNIT MAKE_ID('U','N','I','T') 360 #define IFFCHNK_OFFLINE MAKE_ID('O','F','F','L') 361 #define IFFCHNK_GLOBALCFG MAKE_ID('G','C','F','G') 362 #define IFFCHNK_DEVID MAKE_ID('D','V','I','D') 363 #define IFFCHNK_IFID MAKE_ID('I','F','I','D') 364 #define IFFCHNK_FORCEDBIND MAKE_ID('F','B','N','D') 365 #define IFFCHNK_POPUP MAKE_ID('P','O','P','O') 366 #define IFFCHNK_INSERTSND MAKE_ID('I','N','S','F') 367 #define IFFCHNK_REMOVESND MAKE_ID('R','M','S','F') 368 369 /* Private stuff starts here */ 370 371 #if defined(__GNUC__) 372 # pragma pack(2) 373 #endif 374 375 /* GCA_PopupDeviceNew definitions */ 376 377 #define PGCP_NEVER 0 /* never open a pop-up window */ 378 #define PGCP_ERROR 1 /* popup, on error condition (e.g. low power) */ 379 #define PGCP_ISNEW 2 /* popup, if this is the first time the device is connected */ 380 #define PGCP_NOBINDING 3 /* popup, if there is no binding */ 381 #define PGCP_ASKCONFIG 4 /* popup and ask to configure, if not existent */ 382 #define PGCP_CANCONFIG 5 /* popup and ask to configure, if possible */ 383 #define PGCP_HASBINDING 6 /* popup, if there is a binding to a class */ 384 #define PGCP_ALWAYS 7 /* popup always */ 385 386 /* DA_OverridePowerInfo definitions */ 387 #define POCP_TRUST_DEVICE 0 388 #define POCP_BUS_POWERED 1 389 #define POCP_SELF_POWERED 2 390 391 #if defined(__GNUC__) 392 # pragma pack() 393 #endif 394 395 /* The library node - private 396 */ 397 struct PsdBase 398 { 399 struct Library ps_Library; /* standard */ 400 }; 401 402 struct PsdEventHook 403 { 404 struct Node peh_Node; /* Node linkage */ 405 }; 406 407 struct PsdEventNote 408 { 409 struct Message pen_Msg; /* Intertask communication message */ 410 }; 411 412 struct PsdErrorMsg 413 { 414 struct Node pem_Node; /* Node linkage */ 415 }; 416 417 struct PsdIFFContext 418 { 419 struct Node pic_Node; /* Node linkage */ 420 }; 421 422 struct PsdUsbClass 423 { 424 struct Node puc_Node; /* Node linkage */ 425 }; 426 427 struct PsdAppBinding 428 { 429 struct Node pab_Node; /* Node linkage */ 430 }; 431 432 struct PsdHardware 433 { 434 struct Node phw_Node; /* Node linkage */ 435 }; 436 437 struct PsdDevice 438 { 439 struct Node pd_Node; /* Node linkage */ 440 }; 441 442 struct PsdDescriptor 443 { 444 struct Node pdd_Node; /* Node linkage */ 445 }; 446 447 struct PsdConfig 448 { 449 struct Node pc_Node; /* Node linkage */ 450 }; 451 452 struct PsdInterface 453 { 454 struct Node pif_Node; /* Node linkage */ 455 }; 456 457 struct PsdEndpoint 458 { 459 struct Node pep_Node; /* Node linkage */ 460 }; 461 462 struct PsdPipe 463 { 464 struct Message pp_Msg; /* Intertask communication message */ 465 }; 466 467 struct PsdPipeStream 468 { 469 struct Node pps_Node; /* Node linkage */ 470 }; 471 472 struct PsdRTIsoHandler 473 { 474 struct Node prt_Node; /* Node linkage */ 475 }; 476 477 #endif /* LIBRARIES_POSEIDON_H */