]> git.saurik.com Git - apple/xnu.git/blobdiff - iokit/IOKit/IODataQueueShared.h
xnu-3789.51.2.tar.gz
[apple/xnu.git] / iokit / IOKit / IODataQueueShared.h
index 2b29ba023ca6e860a50602b8f8d8e839d5d8d72a..dc4532486dde545a431e84eafe839ae084db9452 100644 (file)
@@ -30,6 +30,8 @@
 #define _IOKIT_IODATAQUEUESHARED_H
 
 #include <libkern/OSTypes.h>
+#include <mach/port.h>
+#include <mach/message.h>
 
 /*!
  * @typedef IODataQueueEntry
@@ -40,7 +42,7 @@
  */
 typedef struct _IODataQueueEntry{
     UInt32  size;
-    void *  data;
+    UInt8   data[4];
 } IODataQueueEntry;
 
 /*!
@@ -59,15 +61,32 @@ typedef struct _IODataQueueMemory {
     IODataQueueEntry  queue[1];
 } IODataQueueMemory;
 
+/*!
+ * @typedef IODataQueueAppendix
+ * @abstract A struct mapping to the appendix region of a data queue.
+ * @discussion This struct is variable sized dependent on the version.  The struct represents the data queue appendix information.
+ * @field version The version of the queue appendix.
+ * @field msgh Mach message header containing the notification mach port associated with this queue.
+ */
+typedef struct _IODataQueueAppendix {
+    UInt32            version;
+    mach_msg_header_t msgh;
+} IODataQueueAppendix;
+
 /*!
  * @defined DATA_QUEUE_ENTRY_HEADER_SIZE Represents the size of the data queue entry header independent of the actual size of the data in the entry.  This is the overhead of each entry in the queue.  The total size of an entry is equal to this value plus the size stored in the entry's size field (in IODataQueueEntry).
  */
-#define DATA_QUEUE_ENTRY_HEADER_SIZE (sizeof(IODataQueueEntry) - sizeof(void *))
+#define DATA_QUEUE_ENTRY_HEADER_SIZE (sizeof(IODataQueueEntry) - 4)
 
 /*!
- * @defined DATA_QUEUE_MEMORY_HEADER_SIZE Represents the size of the data queue memory header independent of the actual size of the queue data itself.  The total size of the queue memory is equal to this value plus the size of the queue data region which is stored in the queueSize field of IODataQueueMeory.
+ * @defined DATA_QUEUE_MEMORY_HEADER_SIZE Represents the size of the data queue memory header independent of the actual size of the queue data itself.  The total size of the queue memory is equal to this value plus the size of the queue appendix and the size of the queue data region which is stored in the queueSize field of IODataQueueMeory.
  */
 #define DATA_QUEUE_MEMORY_HEADER_SIZE (sizeof(IODataQueueMemory) - sizeof(IODataQueueEntry))
 
+/*!
+ * @defined DATA_QUEUE_MEMORY_APPENDIX_SIZE Represents the size of the data queue memory appendix independent of the actual size of the queue data itself.  The total size of the queue memory is equal to this value plus the size of queue header and size of the queue data region which is stored in the queueSize field of IODataQueueMeory.
+ */
+#define DATA_QUEUE_MEMORY_APPENDIX_SIZE (sizeof(IODataQueueAppendix))
+
 #endif /* _IOKIT_IODATAQUEUESHARED_H */