Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
B
Beam Positoning Monitor - Software
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
Wiki
Wiki
image/svg+xml
Discourse
Discourse
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
Projects
Beam Positoning Monitor - Software
Commits
ba62fe4b
Commit
ba62fe4b
authored
Apr 23, 2015
by
Lucas Russo
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
include/sdb.h: add SDB file header as just linux >= 3.11 have it
parent
f88c4330
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
159 additions
and
0 deletions
+159
-0
sdb.h
include/sdb.h
+159
-0
No files found.
include/sdb.h
0 → 100644
View file @
ba62fe4b
/*
* This is the official version 1.1 of sdb.h
*/
#ifndef __SDB_H__
#define __SDB_H__
#ifdef __KERNEL__
#include <linux/types.h>
#else
#include <stdint.h>
#endif
/*
* All structures are 64 bytes long and are expected
* to live in an array, one for each interconnect.
* Most fields of the structures are shared among the
* various types, and most-specific fields are at the
* beginning (for alignment reasons, and to keep the
* magic number at the head of the interconnect record
*/
/* Product, 40 bytes at offset 24, 8-byte aligned
*
* device_id is vendor-assigned; version is device-specific,
* date is hex (e.g 0x20120501), name is UTF-8, blank-filled
* and not terminated with a 0 byte.
*/
struct
sdb_product
{
uint64_t
vendor_id
;
/* 0x18..0x1f */
uint32_t
device_id
;
/* 0x20..0x23 */
uint32_t
version
;
/* 0x24..0x27 */
uint32_t
date
;
/* 0x28..0x2b */
uint8_t
name
[
19
];
/* 0x2c..0x3e */
uint8_t
record_type
;
/* 0x3f */
};
/*
* Component, 56 bytes at offset 8, 8-byte aligned
*
* The address range is first to last, inclusive
* (for example 0x100000 - 0x10ffff)
*/
struct
sdb_component
{
uint64_t
addr_first
;
/* 0x08..0x0f */
uint64_t
addr_last
;
/* 0x10..0x17 */
struct
sdb_product
product
;
/* 0x18..0x3f */
};
/* Type of the SDB record */
enum
sdb_record_type
{
sdb_type_interconnect
=
0x00
,
sdb_type_device
=
0x01
,
sdb_type_bridge
=
0x02
,
sdb_type_integration
=
0x80
,
sdb_type_repo_url
=
0x81
,
sdb_type_synthesis
=
0x82
,
sdb_type_empty
=
0xFF
,
};
/* Type 0: interconnect (first of the array)
*
* sdb_records is the length of the table including this first
* record, version is 1. The bus type is enumerated later.
*/
#define SDB_MAGIC 0x5344422d
/* "SDB-" */
struct
sdb_interconnect
{
uint32_t
sdb_magic
;
/* 0x00-0x03 */
uint16_t
sdb_records
;
/* 0x04-0x05 */
uint8_t
sdb_version
;
/* 0x06 */
uint8_t
sdb_bus_type
;
/* 0x07 */
struct
sdb_component
sdb_component
;
/* 0x08-0x3f */
};
/* Type 1: device
*
* class is 0 for "custom device", other values are
* to be standardized; ABI version is for the driver,
* bus-specific bits are defined by each bus (see below)
*/
struct
sdb_device
{
uint16_t
abi_class
;
/* 0x00-0x01 */
uint8_t
abi_ver_major
;
/* 0x02 */
uint8_t
abi_ver_minor
;
/* 0x03 */
uint32_t
bus_specific
;
/* 0x04-0x07 */
struct
sdb_component
sdb_component
;
/* 0x08-0x3f */
};
/* Type 2: bridge
*
* child is the address of the nested SDB table
*/
struct
sdb_bridge
{
uint64_t
sdb_child
;
/* 0x00-0x07 */
struct
sdb_component
sdb_component
;
/* 0x08-0x3f */
};
/* Type 0x80: integration
*
* all types with bit 7 set are meta-information, so
* software can ignore the types it doesn't know. Here we
* just provide product information for an aggregate device
*/
struct
sdb_integration
{
uint8_t
reserved
[
24
];
/* 0x00-0x17 */
struct
sdb_product
product
;
/* 0x08-0x3f */
};
/* Type 0x81: Top module repository url
*
* again, an informative field that software can ignore
*/
struct
sdb_repo_url
{
uint8_t
repo_url
[
63
];
/* 0x00-0x3e */
uint8_t
record_type
;
/* 0x3f */
};
/* Type 0x82: Synthesis tool information
*
* this informative record
*/
struct
sdb_synthesis
{
uint8_t
syn_name
[
16
];
/* 0x00-0x0f */
uint8_t
commit_id
[
16
];
/* 0x10-0x1f */
uint8_t
tool_name
[
8
];
/* 0x20-0x27 */
uint32_t
tool_version
;
/* 0x28-0x2b */
uint32_t
date
;
/* 0x2c-0x2f */
uint8_t
user_name
[
15
];
/* 0x30-0x3e */
uint8_t
record_type
;
/* 0x3f */
};
/* Type 0xff: empty
*
* this allows keeping empty slots during development,
* so they can be filled later with minimal efforts and
* no misleading description is ever shipped -- hopefully.
* It can also be used to pad a table to a desired length.
*/
struct
sdb_empty
{
uint8_t
reserved
[
63
];
/* 0x00-0x3e */
uint8_t
record_type
;
/* 0x3f */
};
/* The type of bus, for bus-specific flags */
enum
sdb_bus_type
{
sdb_wishbone
=
0x00
,
sdb_data
=
0x01
,
};
#define SDB_WB_WIDTH_MASK 0x0f
#define SDB_WB_ACCESS8 0x01
#define SDB_WB_ACCESS16 0x02
#define SDB_WB_ACCESS32 0x04
#define SDB_WB_ACCESS64 0x08
#define SDB_WB_LITTLE_ENDIAN 0x80
#define SDB_DATA_READ 0x04
#define SDB_DATA_WRITE 0x02
#define SDB_DATA_EXEC 0x01
#endif
/* __SDB_H__ */
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment