11da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 21da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * IBM ASM Service Processor Device Driver 31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 41da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * This program is free software; you can redistribute it and/or modify 51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * it under the terms of the GNU General Public License as published by 61da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * the Free Software Foundation; either version 2 of the License, or 71da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * (at your option) any later version. 81da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 91da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * This program is distributed in the hope that it will be useful, 101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * but WITHOUT ANY WARRANTY; without even the implied warranty of 111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * GNU General Public License for more details. 131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * You should have received a copy of the GNU General Public License 151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * along with this program; if not, write to the Free Software 161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Copyright (C) IBM Corporation, 2004 191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 20d36b691077dc59c74efec0d54ed21b86f7a2a21aAl Viro * Author: Max Asböck <amax@us.ibm.com> 211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef __DOT_COMMAND_H__ 251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define __DOT_COMMAND_H__ 261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * dot commands are the protocol used to communicate with the service 291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * processor. 301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * They consist of header, a command of variable length and data of 311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * variable length. 321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* dot command types */ 351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define sp_write 0 361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define sp_write_next 1 371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define sp_read 2 381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define sp_read_next 3 391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define sp_command_response 4 401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define sp_event 5 411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define sp_heartbeat 6 421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#pragma pack(1) 441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct dot_command_header { 451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 type; 461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 command_size; 471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u16 data_size; 481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 status; 491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u8 reserved; 501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#pragma pack() 521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic inline size_t get_dot_command_size(void *buffer) 541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{ 551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct dot_command_header *cmd = (struct dot_command_header *)buffer; 561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds return sizeof(struct dot_command_header) + cmd->command_size + cmd->data_size; 571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} 581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic inline unsigned int get_dot_command_timeout(void *buffer) 601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{ 611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct dot_command_header *header = (struct dot_command_header *)buffer; 621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned char *cmd = buffer + sizeof(struct dot_command_header); 631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* dot commands 6.3.1, 7.1 and 8.x need a longer timeout */ 651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds if (header->command_size == 3) { 671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds if ((cmd[0] == 6) && (cmd[1] == 3) && (cmd[2] == 1)) 681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds return IBMASM_CMD_TIMEOUT_EXTRA; 691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds } else if (header->command_size == 2) { 701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds if ((cmd[0] == 7) && (cmd[1] == 1)) 711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds return IBMASM_CMD_TIMEOUT_EXTRA; 721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds if (cmd[0] == 8) 731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds return IBMASM_CMD_TIMEOUT_EXTRA; 741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds } 751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds return IBMASM_CMD_TIMEOUT_NORMAL; 761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} 771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif /* __DOT_COMMAND_H__ */ 79