drivers/misc/sgi-gru/grukservices.h
Source file repositories/reference/linux-study-clean/drivers/misc/sgi-gru/grukservices.h
File Facts
- System
- Linux kernel
- Corpus path
drivers/misc/sgi-gru/grukservices.h- Extension
.h- Size
- 5610 bytes
- Lines
- 202
- Domain
- Driver Families
- Bucket
- drivers/misc
- Inferred role
- Driver Families: implementation source
- Status
- source implementation candidate
Why This File Exists
Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
- No C-style include directives detected by the generator.
Detected Declarations
struct gru_message_queue_desc
Annotated Snippet
struct gru_message_queue_desc {
void *mq; /* message queue vaddress */
unsigned long mq_gpa; /* global address of mq */
int qlines; /* queue size in CL */
int interrupt_vector; /* interrupt vector */
int interrupt_pnode; /* pnode for interrupt */
int interrupt_apicid; /* lapicid for interrupt */
};
/*
* Initialize a user allocated chunk of memory to be used as
* a message queue. The caller must ensure that the queue is
* in contiguous physical memory and is cacheline aligned.
*
* Message queue size is the total number of bytes allocated
* to the queue including a 2 cacheline header that is used
* to manage the queue.
*
* Input:
* mqd pointer to message queue descriptor
* p pointer to user allocated mesq memory.
* bytes size of message queue in bytes
* vector interrupt vector (zero if no interrupts)
* nasid nasid of blade where interrupt is delivered
* apicid apicid of cpu for interrupt
*
* Errors:
* 0 OK
* >0 error
*/
extern int gru_create_message_queue(struct gru_message_queue_desc *mqd,
void *p, unsigned int bytes, int nasid, int vector, int apicid);
/*
* Send a message to a message queue.
*
* Note: The message queue transport mechanism uses the first 32
* bits of the message. Users should avoid using these bits.
*
*
* Input:
* mqd pointer to message queue descriptor
* mesg pointer to message. Must be 64-bit aligned
* bytes size of message in bytes
*
* Output:
* 0 message sent
* >0 Send failure - see error codes below
*
*/
extern int gru_send_message_gpa(struct gru_message_queue_desc *mqd,
void *mesg, unsigned int bytes);
/* Status values for gru_send_message() */
#define MQE_OK 0 /* message sent successfully */
#define MQE_CONGESTION 1 /* temporary congestion, try again */
#define MQE_QUEUE_FULL 2 /* queue is full */
#define MQE_UNEXPECTED_CB_ERR 3 /* unexpected CB error */
#define MQE_PAGE_OVERFLOW 10 /* BUG - queue overflowed a page */
#define MQE_BUG_NO_RESOURCES 11 /* BUG - could not alloc GRU cb/dsr */
/*
* Advance the receive pointer for the message queue to the next message.
* Note: current API requires messages to be gotten & freed in order. Future
* API extensions may allow for out-of-order freeing.
*
* Input
* mqd pointer to message queue descriptor
* mesq message being freed
*/
extern void gru_free_message(struct gru_message_queue_desc *mqd,
void *mesq);
/*
* Get next message from message queue. Returns pointer to
* message OR NULL if no message present.
* User must call gru_free_message() after message is processed
* in order to move the queue pointers to next message.
*
* Input
* mqd pointer to message queue descriptor
*
* Output:
* p pointer to message
* NULL no message available
*/
extern void *gru_get_next_message(struct gru_message_queue_desc *mqd);
/*
Annotation
- Detected declarations: `struct gru_message_queue_desc`.
- Atlas domain: Driver Families / drivers/misc.
- Implementation status: source implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.