iPXE
pci_settings.c File Reference

PCI device settings. More...

#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <ipxe/pci.h>
#include <ipxe/settings.h>
#include <ipxe/init.h>

Go to the source code of this file.

Functions

 FILE_LICENCE (GPL2_OR_LATER_OR_UBDL)
 FILE_SECBOOT (PERMITTED)
static int pci_settings_applies (struct settings *settings __unused, const struct setting *setting)
 Check applicability of PCI device setting.
static int pci_settings_fetch (struct settings *settings __unused, struct setting *setting, void *data, size_t len)
 Fetch value of PCI device setting.
static void pci_settings_init (void)
 Initialise PCI device settings.
struct init_fn pci_settings_init_fn __init_fn (INIT_NORMAL)
 PCI device settings initialiser.

Variables

static const struct settings_scope pci_settings_scope
 PCI device settings scope.
static struct settings_operations pci_settings_operations
 PCI device settings operations.
static struct settings pci_settings
 PCI device settings.

Detailed Description

PCI device settings.

Definition in file pci_settings.c.

Function Documentation

◆ FILE_LICENCE()

FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL )

◆ FILE_SECBOOT()

FILE_SECBOOT ( PERMITTED )

◆ pci_settings_applies()

int pci_settings_applies ( struct settings *settings __unused,
const struct setting * setting )
static

Check applicability of PCI device setting.

Parameters
settingsSettings block
settingSetting
Return values
appliesSetting applies within this settings block

Definition at line 50 of file pci_settings.c.

51 {
52
53 return ( setting->scope == &pci_settings_scope );
54}
static const struct settings_scope pci_settings_scope
PCI device settings scope.
A setting.
Definition settings.h:24
const struct settings_scope * scope
Setting scope (or NULL)
Definition settings.h:50

References __unused, pci_settings_scope, and setting::scope.

◆ pci_settings_fetch()

int pci_settings_fetch ( struct settings *settings __unused,
struct setting * setting,
void * data,
size_t len )
static

Fetch value of PCI device setting.

Parameters
settingsSettings block
settingSetting to fetch
dataBuffer to fill with setting data
lenLength of buffer
Return values
lenLength of setting data, or negative error

Definition at line 65 of file pci_settings.c.

67 {
68 struct pci_device pci;
69 unsigned int tag_busdevfn;
70 unsigned int tag_offset;
71 unsigned int tag_len;
72 unsigned int i;
73
74 /* Extract busdevfn, offset, and length from tag */
75 tag_busdevfn = ( setting->tag >> 16 );
76 tag_offset = ( ( setting->tag >> 8 ) & 0xff );
77 tag_len = ( ( setting->tag >> 0 ) & 0xff );
78
79 /* Locate PCI device */
80 memset ( &pci, 0, sizeof ( pci ) );
81 pci_init ( &pci, tag_busdevfn );
82 DBG ( PCI_FMT " reading %#02x+%#x\n", PCI_ARGS ( &pci ),
83 tag_offset, tag_len );
84
85 /* Read data one byte at a time, in reverse order (since PCI
86 * is little-endian and iPXE settings are essentially
87 * big-endian).
88 */
89 tag_offset += tag_len;
90 for ( i = 0 ; ( ( i < tag_len ) && ( i < len ) ); i++ ) {
91 pci_read_config_byte ( &pci, --tag_offset, data++ );
92 }
93
94 /* Set type to ":hexraw" if not already specified */
95 if ( ! setting->type )
96 setting->type = &setting_type_hexraw;
97
98 return tag_len;
99}
ring len
Length.
Definition dwmac.h:226
uint8_t data[48]
Additional event data.
Definition ena.h:11
#define DBG(...)
Print a debugging message.
Definition compiler.h:498
int pci_read_config_byte(struct pci_device *pci, unsigned int where, uint8_t *value)
Read byte from PCI configuration space.
void * memset(void *dest, int character, size_t len) __nonnull
#define PCI_FMT
PCI device debug message format.
Definition pci.h:312
#define PCI_ARGS(pci)
PCI device debug message arguments.
Definition pci.h:315
static void pci_init(struct pci_device *pci, unsigned int busdevfn)
Initialise PCI device.
Definition pci.h:341
A PCI device.
Definition pci.h:211
const struct setting_type * type
Setting type.
Definition settings.h:37
uint64_t tag
Setting tag, if applicable.
Definition settings.h:44

References __unused, data, DBG, len, memset(), PCI_ARGS, PCI_FMT, pci_init(), pci_read_config_byte(), setting::tag, and setting::type.

◆ pci_settings_init()

void pci_settings_init ( void )
static

Initialise PCI device settings.

Definition at line 117 of file pci_settings.c.

117 {
118 int rc;
119
120 if ( ( rc = register_settings ( &pci_settings, NULL, "pci" ) ) != 0 ) {
121 DBG ( "PCI could not register settings: %s\n",
122 strerror ( rc ) );
123 return;
124 }
125}
#define NULL
NULL pointer (VOID *)
Definition Base.h:322
struct arbelprm_rc_send_wqe rc
Definition arbel.h:3
static struct settings pci_settings
PCI device settings.
int register_settings(struct settings *settings, struct settings *parent, const char *name)
Register settings block.
Definition settings.c:476
char * strerror(int errno)
Retrieve string representation of error number.
Definition strerror.c:79

References DBG, NULL, pci_settings, rc, register_settings(), and strerror().

Referenced by __init_fn().

◆ __init_fn()

struct init_fn pci_settings_init_fn __init_fn ( INIT_NORMAL )

PCI device settings initialiser.

References __init_fn, INIT_NORMAL, and pci_settings_init().

Variable Documentation

◆ pci_settings_scope

const struct settings_scope pci_settings_scope
static

PCI device settings scope.

Definition at line 41 of file pci_settings.c.

Referenced by pci_settings_applies().

◆ pci_settings_operations

struct settings_operations pci_settings_operations
static
Initial value:
= {
}
static int pci_settings_applies(struct settings *settings __unused, const struct setting *setting)
Check applicability of PCI device setting.
static int pci_settings_fetch(struct settings *settings __unused, struct setting *setting, void *data, size_t len)
Fetch value of PCI device setting.

PCI device settings operations.

Definition at line 102 of file pci_settings.c.

102 {
103 .applies = pci_settings_applies,
104 .fetch = pci_settings_fetch,
105};

◆ pci_settings

struct settings pci_settings
static
Initial value:
= {
.refcnt = NULL,
.siblings = LIST_HEAD_INIT ( pci_settings.siblings ),
.children = LIST_HEAD_INIT ( pci_settings.children ),
.default_scope = &pci_settings_scope,
}
#define LIST_HEAD_INIT(list)
Initialise a static list head.
Definition list.h:31
static struct settings_operations pci_settings_operations
PCI device settings operations.

PCI device settings.

Definition at line 108 of file pci_settings.c.

108 {
109 .refcnt = NULL,
110 .siblings = LIST_HEAD_INIT ( pci_settings.siblings ),
111 .children = LIST_HEAD_INIT ( pci_settings.children ),
113 .default_scope = &pci_settings_scope,
114};

Referenced by pci_settings_init(), and PROVIDE_REQUIRING_SYMBOL().