162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * dcdbas.h: Definitions for Dell Systems Management Base driver 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * Copyright (C) 1995-2005 Dell Inc. 662306a36Sopenharmony_ci */ 762306a36Sopenharmony_ci 862306a36Sopenharmony_ci#ifndef _DCDBAS_H_ 962306a36Sopenharmony_ci#define _DCDBAS_H_ 1062306a36Sopenharmony_ci 1162306a36Sopenharmony_ci#include <linux/device.h> 1262306a36Sopenharmony_ci#include <linux/sysfs.h> 1362306a36Sopenharmony_ci#include <linux/types.h> 1462306a36Sopenharmony_ci 1562306a36Sopenharmony_ci#define MAX_SMI_DATA_BUF_SIZE (256 * 1024) 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_ci#define HC_ACTION_NONE (0) 1862306a36Sopenharmony_ci#define HC_ACTION_HOST_CONTROL_POWEROFF BIT(1) 1962306a36Sopenharmony_ci#define HC_ACTION_HOST_CONTROL_POWERCYCLE BIT(2) 2062306a36Sopenharmony_ci 2162306a36Sopenharmony_ci#define HC_SMITYPE_NONE (0) 2262306a36Sopenharmony_ci#define HC_SMITYPE_TYPE1 (1) 2362306a36Sopenharmony_ci#define HC_SMITYPE_TYPE2 (2) 2462306a36Sopenharmony_ci#define HC_SMITYPE_TYPE3 (3) 2562306a36Sopenharmony_ci 2662306a36Sopenharmony_ci#define ESM_APM_CMD (0x0A0) 2762306a36Sopenharmony_ci#define ESM_APM_POWER_CYCLE (0x10) 2862306a36Sopenharmony_ci#define ESM_STATUS_CMD_UNSUCCESSFUL (-1) 2962306a36Sopenharmony_ci 3062306a36Sopenharmony_ci#define CMOS_BASE_PORT (0x070) 3162306a36Sopenharmony_ci#define CMOS_PAGE1_INDEX_PORT (0) 3262306a36Sopenharmony_ci#define CMOS_PAGE1_DATA_PORT (1) 3362306a36Sopenharmony_ci#define CMOS_PAGE2_INDEX_PORT_PIIX4 (2) 3462306a36Sopenharmony_ci#define CMOS_PAGE2_DATA_PORT_PIIX4 (3) 3562306a36Sopenharmony_ci#define PE1400_APM_CONTROL_PORT (0x0B0) 3662306a36Sopenharmony_ci#define PCAT_APM_CONTROL_PORT (0x0B2) 3762306a36Sopenharmony_ci#define PCAT_APM_STATUS_PORT (0x0B3) 3862306a36Sopenharmony_ci#define PE1300_CMOS_CMD_STRUCT_PTR (0x38) 3962306a36Sopenharmony_ci#define PE1400_CMOS_CMD_STRUCT_PTR (0x70) 4062306a36Sopenharmony_ci 4162306a36Sopenharmony_ci#define MAX_SYSMGMT_SHORTCMD_PARMBUF_LEN (14) 4262306a36Sopenharmony_ci#define MAX_SYSMGMT_LONGCMD_SGENTRY_NUM (16) 4362306a36Sopenharmony_ci 4462306a36Sopenharmony_ci#define TIMEOUT_USEC_SHORT_SEMA_BLOCKING (10000) 4562306a36Sopenharmony_ci#define EXPIRED_TIMER (0) 4662306a36Sopenharmony_ci 4762306a36Sopenharmony_ci#define SMI_CMD_MAGIC (0x534D4931) 4862306a36Sopenharmony_ci#define SMM_EPS_SIG "$SCB" 4962306a36Sopenharmony_ci 5062306a36Sopenharmony_ci#define DCDBAS_DEV_ATTR_RW(_name) \ 5162306a36Sopenharmony_ci DEVICE_ATTR(_name,0600,_name##_show,_name##_store); 5262306a36Sopenharmony_ci 5362306a36Sopenharmony_ci#define DCDBAS_DEV_ATTR_RO(_name) \ 5462306a36Sopenharmony_ci DEVICE_ATTR(_name,0400,_name##_show,NULL); 5562306a36Sopenharmony_ci 5662306a36Sopenharmony_ci#define DCDBAS_DEV_ATTR_WO(_name) \ 5762306a36Sopenharmony_ci DEVICE_ATTR(_name,0200,NULL,_name##_store); 5862306a36Sopenharmony_ci 5962306a36Sopenharmony_ci#define DCDBAS_BIN_ATTR_RW(_name) \ 6062306a36Sopenharmony_cistruct bin_attribute bin_attr_##_name = { \ 6162306a36Sopenharmony_ci .attr = { .name = __stringify(_name), \ 6262306a36Sopenharmony_ci .mode = 0600 }, \ 6362306a36Sopenharmony_ci .read = _name##_read, \ 6462306a36Sopenharmony_ci .write = _name##_write, \ 6562306a36Sopenharmony_ci} 6662306a36Sopenharmony_ci 6762306a36Sopenharmony_cistruct smi_cmd { 6862306a36Sopenharmony_ci __u32 magic; 6962306a36Sopenharmony_ci __u32 ebx; 7062306a36Sopenharmony_ci __u32 ecx; 7162306a36Sopenharmony_ci __u16 command_address; 7262306a36Sopenharmony_ci __u8 command_code; 7362306a36Sopenharmony_ci __u8 reserved; 7462306a36Sopenharmony_ci __u8 command_buffer[1]; 7562306a36Sopenharmony_ci} __attribute__ ((packed)); 7662306a36Sopenharmony_ci 7762306a36Sopenharmony_cistruct apm_cmd { 7862306a36Sopenharmony_ci __u8 command; 7962306a36Sopenharmony_ci __s8 status; 8062306a36Sopenharmony_ci __u16 reserved; 8162306a36Sopenharmony_ci union { 8262306a36Sopenharmony_ci struct { 8362306a36Sopenharmony_ci __u8 parm[MAX_SYSMGMT_SHORTCMD_PARMBUF_LEN]; 8462306a36Sopenharmony_ci } __attribute__ ((packed)) shortreq; 8562306a36Sopenharmony_ci 8662306a36Sopenharmony_ci struct { 8762306a36Sopenharmony_ci __u16 num_sg_entries; 8862306a36Sopenharmony_ci struct { 8962306a36Sopenharmony_ci __u32 size; 9062306a36Sopenharmony_ci __u64 addr; 9162306a36Sopenharmony_ci } __attribute__ ((packed)) 9262306a36Sopenharmony_ci sglist[MAX_SYSMGMT_LONGCMD_SGENTRY_NUM]; 9362306a36Sopenharmony_ci } __attribute__ ((packed)) longreq; 9462306a36Sopenharmony_ci } __attribute__ ((packed)) parameters; 9562306a36Sopenharmony_ci} __attribute__ ((packed)); 9662306a36Sopenharmony_ci 9762306a36Sopenharmony_ciint dcdbas_smi_request(struct smi_cmd *smi_cmd); 9862306a36Sopenharmony_ci 9962306a36Sopenharmony_cistruct smm_eps_table { 10062306a36Sopenharmony_ci char smm_comm_buff_anchor[4]; 10162306a36Sopenharmony_ci u8 length; 10262306a36Sopenharmony_ci u8 checksum; 10362306a36Sopenharmony_ci u8 version; 10462306a36Sopenharmony_ci u64 smm_comm_buff_addr; 10562306a36Sopenharmony_ci u64 num_of_4k_pages; 10662306a36Sopenharmony_ci} __packed; 10762306a36Sopenharmony_ci 10862306a36Sopenharmony_cistruct smi_buffer { 10962306a36Sopenharmony_ci u8 *virt; 11062306a36Sopenharmony_ci unsigned long size; 11162306a36Sopenharmony_ci dma_addr_t dma; 11262306a36Sopenharmony_ci}; 11362306a36Sopenharmony_ci 11462306a36Sopenharmony_ciint dcdbas_smi_alloc(struct smi_buffer *smi_buffer, unsigned long size); 11562306a36Sopenharmony_civoid dcdbas_smi_free(struct smi_buffer *smi_buffer); 11662306a36Sopenharmony_ci 11762306a36Sopenharmony_ci#endif /* _DCDBAS_H_ */ 11862306a36Sopenharmony_ci 119