/** * struct mei_ext_meta_hdr - extend header meta data * @count: number of headers * @size: total size of the extended header list excluding meta header * @reserved: reserved * @hdrs: extended headers TLV list
*/ struct mei_ext_meta_hdr {
u8 count;
u8 size;
u8 reserved[2];
u8 hdrs[];
} __packed;
/* * Extended header iterator functions
*/ /** * mei_ext_begin - extended header iterator begin * * @meta: meta header of the extended header list * * Return: The first extended header
*/ staticinlinestruct mei_ext_hdr *mei_ext_begin(struct mei_ext_meta_hdr *meta)
{ return (struct mei_ext_hdr *)meta->hdrs;
}
/** * mei_ext_last - check if the ext is the last one in the TLV list * * @meta: meta header of the extended header list * @ext: a meta header on the list * * Return: true if ext is the last header on the list
*/ staticinlinebool mei_ext_last(struct mei_ext_meta_hdr *meta, struct mei_ext_hdr *ext)
{ return (u8 *)ext >= (u8 *)meta + sizeof(*meta) + (meta->size * 4);
}
/** * struct mei_ext_hdr_gsc_f2h - gsc firmware to host interface * * @hdr: extended header * @client_id: GSC_HECI_MSG_KERNEL or GSC_HECI_MSG_USER * @reserved: reserved * @fence_id: synchronization marker * @written: number of bytes written to firmware
*/ struct mei_ext_hdr_gsc_f2h { struct mei_ext_hdr hdr;
u8 client_id;
u8 reserved;
u32 fence_id;
u32 written;
} __packed;
/** * mei_ext_next - following extended header on the TLV list * * @ext: current extend header * * Context: The function does not check for the overflows, * one should call mei_ext_last before. * * Return: The following extend header after @ext
*/ staticinlinestruct mei_ext_hdr *mei_ext_next(struct mei_ext_hdr *ext)
{ return (struct mei_ext_hdr *)((u8 *)ext + (ext->length * 4));
}
/** * mei_ext_hdr_len - get ext header length in bytes * * @ext: extend header * * Return: extend header length in bytes
*/ staticinline u32 mei_ext_hdr_len(conststruct mei_ext_hdr *ext)
{ if (!ext) return 0;
return ext->length * sizeof(u32);
}
/** * struct mei_msg_hdr - MEI BUS Interface Section * * @me_addr: device address * @host_addr: host address * @length: message length * @reserved: reserved * @extended: message has extended header * @dma_ring: message is on dma ring * @internal: message is internal * @msg_complete: last packet of the message * @extension: extension of the header
*/ struct mei_msg_hdr {
u32 me_addr:8;
u32 host_addr:8;
u32 length:9;
u32 reserved:3;
u32 extended:1;
u32 dma_ring:1;
u32 internal:1;
u32 msg_complete:1;
u32 extension[];
} __packed;
/* The length is up to 9 bits */ #define MEI_MSG_MAX_LEN_MASK GENMASK(9, 0)
/** * struct mei_hbm_cl_cmd - client specific host bus command * CONNECT, DISCONNECT, and FlOW CONTROL * * @hbm_cmd: bus message command header * @me_addr: address of the client in ME * @host_addr: address of the client in the driver * @data: generic data
*/ struct mei_hbm_cl_cmd {
u8 hbm_cmd;
u8 me_addr;
u8 host_addr;
u8 data;
};
/** * struct mei_client_properties - mei client properties * * @protocol_name: guid of the client * @protocol_version: client protocol version * @max_number_of_connections: number of possible connections. * @fixed_address: fixed me address (0 if the client is dynamic) * @single_recv_buf: 1 if all connections share a single receive buffer. * @vt_supported: the client support vtag * @reserved: reserved * @max_msg_length: MTU of the client
*/ struct mei_client_properties {
uuid_le protocol_name;
u8 protocol_version;
u8 max_number_of_connections;
u8 fixed_address;
u8 single_recv_buf:1;
u8 vt_supported:1;
u8 reserved:6;
u32 max_msg_length;
} __packed;
/** * struct hbm_add_client_request - request to add a client * might be sent by fw after enumeration has already completed * * @hbm_cmd: bus message command header * @me_addr: address of the client in ME * @reserved: reserved * @client_properties: client properties
*/ struct hbm_add_client_request {
u8 hbm_cmd;
u8 me_addr;
u8 reserved[2]; struct mei_client_properties client_properties;
} __packed;
/** * struct hbm_add_client_response - response to add a client * sent by the host to report client addition status to fw * * @hbm_cmd: bus message command header * @me_addr: address of the client in ME * @status: if HBMS_SUCCESS then the client can now accept connections. * @reserved: reserved
*/ struct hbm_add_client_response {
u8 hbm_cmd;
u8 me_addr;
u8 status;
u8 reserved;
} __packed;
/** * struct hbm_client_connect_request - connect/disconnect request * * @hbm_cmd: bus message command header * @me_addr: address of the client in ME * @host_addr: address of the client in the driver * @reserved: reserved
*/ struct hbm_client_connect_request {
u8 hbm_cmd;
u8 me_addr;
u8 host_addr;
u8 reserved;
} __packed;
/** * struct hbm_client_connect_response - connect/disconnect response * * @hbm_cmd: bus message command header * @me_addr: address of the client in ME * @host_addr: address of the client in the driver * @status: status of the request
*/ struct hbm_client_connect_response {
u8 hbm_cmd;
u8 me_addr;
u8 host_addr;
u8 status;
} __packed;
#define MEI_HBM_NOTIFICATION_START 1 #define MEI_HBM_NOTIFICATION_STOP 0 /** * struct hbm_notification_request - start/stop notification request * * @hbm_cmd: bus message command header * @me_addr: address of the client in ME * @host_addr: address of the client in the driver * @start: start = 1 or stop = 0 asynchronous notifications
*/ struct hbm_notification_request {
u8 hbm_cmd;
u8 me_addr;
u8 host_addr;
u8 start;
} __packed;
/** * struct hbm_notification_response - start/stop notification response * * @hbm_cmd: bus message command header * @me_addr: address of the client in ME * @host_addr: - address of the client in the driver * @status: (mei_hbm_status) response status for the request * - MEI_HBMS_SUCCESS: successful stop/start * - MEI_HBMS_CLIENT_NOT_FOUND: if the connection could not be found. * - MEI_HBMS_ALREADY_STARTED: for start requests for a previously * started notification. * - MEI_HBMS_NOT_STARTED: for stop request for a connected client for whom * asynchronous notifications are currently disabled. * * @start: start = 1 or stop = 0 asynchronous notifications * @reserved: reserved
*/ struct hbm_notification_response {
u8 hbm_cmd;
u8 me_addr;
u8 host_addr;
u8 status;
u8 start;
u8 reserved[3];
} __packed;
/** * struct hbm_notification - notification event * * @hbm_cmd: bus message command header * @me_addr: address of the client in ME * @host_addr: address of the client in the driver * @reserved: reserved for alignment
*/ struct hbm_notification {
u8 hbm_cmd;
u8 me_addr;
u8 host_addr;
u8 reserved;
} __packed;
/** * struct hbm_dma_mem_dscr - dma ring * * @addr_hi: the high 32bits of 64 bit address * @addr_lo: the low 32bits of 64 bit address * @size : size in bytes (must be power of 2)
*/ struct hbm_dma_mem_dscr {
u32 addr_hi;
u32 addr_lo;
u32 size;
} __packed;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.