Changeset View
Changeset View
Standalone View
Standalone View
head/sys/dev/tpm/tpm_crb.c
Show First 20 Lines • Show All 98 Lines • ▼ Show 20 Lines | |||||
static void tpmcrb_relinquish_locality(struct tpm_sc *sc); | static void tpmcrb_relinquish_locality(struct tpm_sc *sc); | ||||
static bool tpmcrb_cancel_cmd(struct tpm_sc *sc); | static bool tpmcrb_cancel_cmd(struct tpm_sc *sc); | ||||
char *tpmcrb_ids[] = {"MSFT0101", NULL}; | char *tpmcrb_ids[] = {"MSFT0101", NULL}; | ||||
static int | static int | ||||
tpmcrb_acpi_probe(device_t dev) | tpmcrb_acpi_probe(device_t dev) | ||||
{ | { | ||||
struct resource *res; | int err; | ||||
int err, rid = 0; | ACPI_TABLE_TPM23 *tbl; | ||||
uint32_t caps; | ACPI_STATUS status; | ||||
err = ACPI_ID_PROBE(device_get_parent(dev), dev, tpmcrb_ids, NULL); | err = ACPI_ID_PROBE(device_get_parent(dev), dev, tpmcrb_ids, NULL); | ||||
if (err > 0) | if (err > 0) | ||||
return (err); | return (err); | ||||
/*Find TPM2 Header*/ | |||||
status = AcpiGetTable(ACPI_SIG_TPM2, 1, (ACPI_TABLE_HEADER **) &tbl); | |||||
if(ACPI_FAILURE(status) || | |||||
tbl->StartMethod != TPM2_START_METHOD_CRB) | |||||
err = ENXIO; | |||||
/* Check if device is in CRB mode */ | |||||
res = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid, RF_ACTIVE); | |||||
if (res == NULL) | |||||
return (ENXIO); | |||||
caps = bus_read_4(res, TPM_CRB_INTF_ID); | |||||
bus_release_resource(dev, SYS_RES_MEMORY, rid, res); | |||||
if ((caps & TPM_CRB_INTF_ID_TYPE) != TPM_CRB_INTF_ID_TYPE_CRB) | |||||
return (ENXIO); | |||||
device_set_desc(dev, "Trusted Platform Module 2.0, CRB mode"); | device_set_desc(dev, "Trusted Platform Module 2.0, CRB mode"); | ||||
return (BUS_PROBE_DEFAULT); | return (err); | ||||
} | } | ||||
static ACPI_STATUS | static ACPI_STATUS | ||||
tpmcrb_fix_buff_offsets(ACPI_RESOURCE *res, void *arg) | tpmcrb_fix_buff_offsets(ACPI_RESOURCE *res, void *arg) | ||||
{ | { | ||||
struct tpmcrb_sc *crb_sc; | struct tpmcrb_sc *crb_sc; | ||||
size_t length; | size_t length; | ||||
uint32_t base_addr; | uint32_t base_addr; | ||||
▲ Show 20 Lines • Show All 291 Lines • Show Last 20 Lines |