1 1.5 ad /* $NetBSD: acpi_srat.h,v 1.5 2019/12/27 12:51:57 ad Exp $ */ 2 1.1 cegger 3 1.1 cegger /* 4 1.1 cegger * Copyright (c) 2009 The NetBSD Foundation, Inc. 5 1.1 cegger * All rights reserved. 6 1.1 cegger * 7 1.1 cegger * This code is derived from software contributed to The NetBSD Foundation 8 1.1 cegger * by Christoph Egger. 9 1.1 cegger * 10 1.1 cegger * Redistribution and use in source and binary forms, with or without 11 1.1 cegger * modification, are permitted provided that the following conditions 12 1.1 cegger * are met: 13 1.1 cegger * 1. Redistributions of source code must retain the above copyright 14 1.1 cegger * notice, this list of conditions and the following disclaimer. 15 1.1 cegger * 2. Redistributions in binary form must reproduce the above copyright 16 1.1 cegger * notice, this list of conditions and the following disclaimer in the 17 1.1 cegger * documentation and/or other materials provided with the distribution. 18 1.1 cegger * 19 1.1 cegger * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 20 1.1 cegger * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 21 1.1 cegger * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 22 1.1 cegger * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 23 1.1 cegger * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 24 1.1 cegger * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 25 1.1 cegger * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 26 1.1 cegger * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 27 1.1 cegger * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 28 1.1 cegger * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 29 1.1 cegger * POSSIBILITY OF SUCH DAMAGE. 30 1.1 cegger */ 31 1.1 cegger 32 1.3 jruoho #ifndef _SYS_DEV_ACPI_ACPI_SRAT_H 33 1.3 jruoho #define _SYS_DEV_ACPI_ACPI_SRAT_H 34 1.1 cegger 35 1.1 cegger typedef uint32_t acpisrat_nodeid_t; 36 1.1 cegger 37 1.1 cegger struct acpisrat_cpu { 38 1.1 cegger acpisrat_nodeid_t nodeid; 39 1.1 cegger uint32_t apicid; 40 1.1 cegger uint32_t sapiceid; 41 1.1 cegger uint32_t flags; 42 1.1 cegger 43 1.4 maxv /* 44 1.4 maxv * clockdomain has a meaningful value when the ACPI MADT table has 45 1.1 cegger * ACPI_MADT_TYPE_LOCAL_X2APIC and/or ACPI_MADT_TYPE_LOCAL_X2APIC_NMI 46 1.1 cegger * entries or ACPI CPU device have a _CDM. 47 1.1 cegger */ 48 1.1 cegger uint32_t clockdomain; 49 1.1 cegger }; 50 1.1 cegger 51 1.1 cegger struct acpisrat_mem { 52 1.1 cegger acpisrat_nodeid_t nodeid; 53 1.1 cegger uint64_t baseaddress; 54 1.1 cegger uint64_t length; 55 1.1 cegger uint32_t flags; 56 1.1 cegger }; 57 1.1 cegger 58 1.4 maxv struct acpisrat_node { 59 1.4 maxv acpisrat_nodeid_t nodeid; /* Proximity domain */ 60 1.4 maxv uint32_t ncpus; /* Number of cpus in this node */ 61 1.4 maxv struct acpisrat_cpu **cpu; /* Array of cpus */ 62 1.4 maxv uint32_t nmems; /* Number of memory ranges in this node */ 63 1.4 maxv struct acpisrat_mem **mem; /* Array of memory ranges */ 64 1.4 maxv }; 65 1.4 maxv 66 1.1 cegger bool acpisrat_exist(void); 67 1.1 cegger int acpisrat_init(void); 68 1.1 cegger int acpisrat_refresh(void); 69 1.1 cegger int acpisrat_exit(void); 70 1.1 cegger void acpisrat_dump(void); 71 1.5 ad void acpisrat_load_uvm(void); 72 1.1 cegger uint32_t acpisrat_nodes(void); 73 1.1 cegger uint32_t acpisrat_node_cpus(acpisrat_nodeid_t); 74 1.1 cegger uint32_t acpisrat_node_memoryranges(acpisrat_nodeid_t); 75 1.4 maxv void acpisrat_cpu(acpisrat_nodeid_t, uint32_t, struct acpisrat_cpu *); 76 1.4 maxv void acpisrat_mem(acpisrat_nodeid_t, uint32_t, struct acpisrat_mem *); 77 1.4 maxv struct acpisrat_node *acpisrat_get_node(uint32_t); 78 1.1 cegger 79 1.3 jruoho #endif /* !_SYS_DEV_ACPI_ACPI_SRAT_H */ 80