hgsmi_defs.h (2079B)
1/* SPDX-License-Identifier: MIT */ 2/* Copyright (C) 2006-2017 Oracle Corporation */ 3 4#ifndef __HGSMI_DEFS_H__ 5#define __HGSMI_DEFS_H__ 6 7/* Buffer sequence type mask. */ 8#define HGSMI_BUFFER_HEADER_F_SEQ_MASK 0x03 9/* Single buffer, not a part of a sequence. */ 10#define HGSMI_BUFFER_HEADER_F_SEQ_SINGLE 0x00 11/* The first buffer in a sequence. */ 12#define HGSMI_BUFFER_HEADER_F_SEQ_START 0x01 13/* A middle buffer in a sequence. */ 14#define HGSMI_BUFFER_HEADER_F_SEQ_CONTINUE 0x02 15/* The last buffer in a sequence. */ 16#define HGSMI_BUFFER_HEADER_F_SEQ_END 0x03 17 18/* 16 bytes buffer header. */ 19struct hgsmi_buffer_header { 20 u32 data_size; /* Size of data that follows the header. */ 21 u8 flags; /* HGSMI_BUFFER_HEADER_F_* */ 22 u8 channel; /* The channel the data must be routed to. */ 23 u16 channel_info; /* Opaque to the HGSMI, used by the channel. */ 24 25 union { 26 /* Opaque placeholder to make the union 8 bytes. */ 27 u8 header_data[8]; 28 29 /* HGSMI_BUFFER_HEADER_F_SEQ_SINGLE */ 30 struct { 31 u32 reserved1; /* A reserved field, initialize to 0. */ 32 u32 reserved2; /* A reserved field, initialize to 0. */ 33 } buffer; 34 35 /* HGSMI_BUFFER_HEADER_F_SEQ_START */ 36 struct { 37 /* Must be the same for all buffers in the sequence. */ 38 u32 sequence_number; 39 /* The total size of the sequence. */ 40 u32 sequence_size; 41 } sequence_start; 42 43 /* 44 * HGSMI_BUFFER_HEADER_F_SEQ_CONTINUE and 45 * HGSMI_BUFFER_HEADER_F_SEQ_END 46 */ 47 struct { 48 /* Must be the same for all buffers in the sequence. */ 49 u32 sequence_number; 50 /* Data offset in the entire sequence. */ 51 u32 sequence_offset; 52 } sequence_continue; 53 } u; 54} __packed; 55 56/* 8 bytes buffer tail. */ 57struct hgsmi_buffer_tail { 58 /* Reserved, must be initialized to 0. */ 59 u32 reserved; 60 /* 61 * One-at-a-Time Hash: https://www.burtleburtle.net/bob/hash/doobs.html 62 * Over the header, offset and for first 4 bytes of the tail. 63 */ 64 u32 checksum; 65} __packed; 66 67/* 68 * The size of the array of channels. Array indexes are u8. 69 * Note: the value must not be changed. 70 */ 71#define HGSMI_NUMBER_OF_CHANNELS 0x100 72 73#endif