1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
|
/*
* zdev - Modify and display the persistent configuration of devices
*
* Copyright IBM Corp. 2016, 2017
*
* s390-tools is free software; you can redistribute it and/or modify
* it under the terms of the MIT license. See LICENSE for details.
*/
#ifndef DEVICE_H
#define DEVICE_H
#include "lib/util_list.h"
#include "exit_code.h"
#include "hash.h"
#include "misc.h"
#include "zdev.h"
struct subtype;
struct setting_list;
/**
* struct device_state - Represent the state of a device in a configuration
* @settings: List of attribute settings
* @exists: Device exists
* @modified: Device state has been modified
* @deconfigured: Device has been deconfigured
* @definable: Device can be defined
* @blacklisted: Device is on the blacklist
*/
struct device_state {
struct setting_list *settings;
unsigned int exists:1;
unsigned int modified:1;
unsigned int deconfigured:1;
unsigned int definable:1;
unsigned int blacklisted:1;
};
/**
* struct device - Represent a device configuration
* @subtype: Pointer to device subtype definition
* @id: Textual device ID
* @devid: Parsed device ID
* @node: Node for adding this device to a list
* @active: Device state in the active configuration
* @persistent: Device state in the persistent configuration
* @autoconf: Auto-configured device state
* @errors: A strlist of error and warning messages issued for the device
* @processed: Device has been processed
*/
struct device {
/* Static data */
struct subtype *subtype;
char *id;
void *devid;
/* Dynamic data */
struct util_list_node node;
struct device_state active;
struct device_state persistent;
struct device_state autoconf;
struct device_state site_specific[NUM_SITES];
unsigned int processed:1;
};
/**
* struct device_list - A list of devices
* @hash: Hash for maintaining a list of devices
* @modified: Indication of whether this list was modified
*/
struct device_list {
struct hash hash;
unsigned int modified:1;
};
struct device *device_new(struct subtype *, const char *);
void device_free(struct device *);
void device_reset(struct device *, config_t);
void device_print(struct device *, int);
bool device_needs_writing(struct device *, config_t);
exit_code_t device_apply_strlist(struct device *, config_t, struct util_list *);
exit_code_t device_apply_settings(struct device *, config_t,
struct util_list *);
void device_add_modules(struct util_list *, struct device *);
char *device_read_active_attrib(struct device *, const char *);
void device_read_active_settings(struct device *, read_scope_t);
exit_code_t device_write_active_settings(struct device *);
exit_code_t device_check_settings(struct device *, config_t, err_t);
struct device_list *device_list_new(struct subtype *);
void device_list_free(struct device_list *);
void device_list_add(struct device_list *, struct device *);
struct device *device_list_find(struct device_list *, const char *,
struct device *);
void device_list_print(struct device_list *, int);
struct setting_list *device_get_setting_list(struct device *dev,
config_t config,
int site_id);
config_t device_get_config(struct device *dev);
char *device_get_sites(struct device *dev);
bool is_dev_pers(struct device *dev);
#endif /* DEVICE_H */
|