src/util/ectool/: init

master
Adam Joseph 2 years ago
parent c40ed36e6b
commit 30ac75903b

@ -88,5 +88,6 @@ in {
'';
});
ectool = final.nixpkgsOnBuildForHost.callPackage (import ../../util/ectool) { };
});
}

@ -0,0 +1,58 @@
{ lib
, stdenv
, pkg-config
, fetchFromGitHub
, boardName ? "kevin"
}:
let makeTarget = "build/${boardName}/util/ectool";
in stdenv.mkDerivation {
pname = "ectool";
version = "1d2c13";
src = fetchFromGitHub {
owner = "coreboot";
repo = "chrome-ec";
rev = "1d2c13a1630a1a6222411e1c03186cb9b1f576e0";
hash = "sha256-xcZQeCEp0q3Wf5XYCY5EtnoIRziu7IA5AYv0ZyXShGk=";
};
postPatch = ''
patchShebangs .
'';
enableParallelBuilding = true;
makeFlags = [
"BOARD=${boardName}"
# ectool's Makefile gets confused when nixpkgs sets $out
"out=build/${boardName}"
# ectool's terminology is crazy; they call the buildPlatform
# HOST and they call the hostPlatform BOARD:
"HOSTCC=${stdenv.cc}/bin/${stdenv.cc.targetPrefix}cc"
"HOSTCPP=${stdenv.cc}/bin/${stdenv.cc.targetPrefix}c++"
# they also use CROSS_COMPILE for the targetPrefix of the
# platform on which `ectool` runs:
"CROSS_COMPILE=${stdenv.cc.targetPrefix}"
# crusty old codebase, new compiler
"EXTRA_CFLAGS=-w -Wno-error -Wno-address-of-packed-member"
#"V=1"
makeTarget
];
installPhase = ''
mkdir -p $out/bin
mv ${makeTarget} $out/bin/
'';
meta = with lib; {
description = "Communicate with Chromebooks' Embedded Controller (EC)";
};
}

@ -0,0 +1,291 @@
diff --git a/util/comm-dev.c b/util/comm-dev.c
index 33a69f9d6..92b76de45 100644
--- a/util/comm-dev.c
+++ b/util/comm-dev.c
@@ -65,10 +65,9 @@ static int ec_command_dev(int command, int version,
s_cmd.command = command;
s_cmd.version = version;
s_cmd.result = 0xff;
+ memcpy(s_cmd.outdata, outdata, outsize);
s_cmd.outsize = outsize;
- s_cmd.outdata = (uint8_t *)outdata;
s_cmd.insize = insize;
- s_cmd.indata = indata;
r = ioctl(fd, CROS_EC_DEV_IOCXCMD, &s_cmd);
if (r < 0) {
@@ -89,6 +88,7 @@ static int ec_command_dev(int command, int version,
return -EECRESULT - s_cmd.result;
}
+ memcpy(indata, s_cmd.indata, insize);
return r;
}
@@ -102,8 +102,8 @@ static int ec_readmem_dev(int offset, int bytes, void *dest)
if (!fake_it) {
s_mem.offset = offset;
s_mem.bytes = bytes;
- s_mem.buffer = dest;
r = ioctl(fd, CROS_EC_DEV_IOCRDMEM, &s_mem);
+ memcpy(dest, s_mem.buffer, bytes);
if (r < 0 && errno == ENOTTY)
fake_it = 1;
else
@@ -199,25 +199,28 @@ static int ec_readmem_dev_v2(int offset, int bytes, void *dest)
*/
static int ec_dev_is_v2(void)
{
+ /*
struct ec_params_hello h_req = {
.in_data = 0xa0b0c0d0
};
struct ec_response_hello h_resp;
- struct cros_ec_command s_cmd = { };
+ struct cros_ec_command s_cmd = {
+ //.indata = 0xa0b0c0d0
+ };
int r;
s_cmd.command = EC_CMD_HELLO;
s_cmd.result = 0xff;
s_cmd.outsize = sizeof(h_req);
- s_cmd.outdata = (uint8_t *)&h_req;
s_cmd.insize = sizeof(h_resp);
- s_cmd.indata = (uint8_t *)&h_resp;
r = ioctl(fd, CROS_EC_DEV_IOCXCMD, &s_cmd);
if (r < 0 && errno == ENOTTY)
return 1;
return 0;
+ */
+ return 1;
}
static int ec_pollevent_dev(unsigned long mask, void *buffer, size_t buf_size,
diff --git a/util/cros_ec_dev.h b/util/cros_ec_dev.h
index 7ff87aed9..c5dce4159 100644
--- a/util/cros_ec_dev.h
+++ b/util/cros_ec_dev.h
@@ -13,24 +13,26 @@
#define CROS_EC_DEV_NAME "cros_ec"
#define CROS_EC_DEV_VERSION "1.0.0"
+#define CROS_EC_PROTO2_MAX_PARAM_SIZE 252
+#define CROS_EC_MEMMAP_SIZE 255
+
/*
* @version: Command version number (often 0)
* @command: Command to send (EC_CMD_...)
- * @outdata: Outgoing data to EC
* @outsize: Outgoing length in bytes
- * @indata: Where to put the incoming data from EC
- * @insize: On call, how much we can accept. On return, how much we got.
+ * @insize: Max number of bytes to accept from EC
* @result: EC's response to the command (separate from communication failure)
- * ioctl returns zero on success, negative on error
+ * @outdata: Outgoing data to EC
+ * @indata: Where to put the incoming data from EC
*/
struct cros_ec_command {
uint32_t version;
uint32_t command;
- uint8_t *outdata;
uint32_t outsize;
- uint8_t *indata;
uint32_t insize;
uint32_t result;
+ uint8_t outdata[CROS_EC_PROTO2_MAX_PARAM_SIZE];
+ uint8_t indata[CROS_EC_PROTO2_MAX_PARAM_SIZE];
};
/*
@@ -43,12 +45,12 @@ struct cros_ec_command {
struct cros_ec_readmem {
uint32_t offset;
uint32_t bytes;
- char *buffer;
+ uint8_t buffer[CROS_EC_MEMMAP_SIZE];
};
-#define CROS_EC_DEV_IOC ':'
-#define CROS_EC_DEV_IOCXCMD _IOWR(':', 0, struct cros_ec_command)
-#define CROS_EC_DEV_IOCRDMEM _IOWR(':', 1, struct cros_ec_readmem)
+#define CROS_EC_DEV_IOC 0xEC
+#define CROS_EC_DEV_IOCXCMD _IOWR(CROS_EC_DEV_IOC, 0, struct cros_ec_command)
+#define CROS_EC_DEV_IOCRDMEM _IOWR(CROS_EC_DEV_IOC, 1, struct cros_ec_readmem)
/*
* @version: Command version number (often 0)
diff --git a/util/ecst.c b/util/ecst.c
old mode 100755
new mode 100644
diff --git a/util/ecst.h b/util/ecst.h
old mode 100755
new mode 100644
diff --git a/util/ectool.c b/util/ectool.c
index 4285e7ce6..4ac9b8c1c 100644
--- a/util/ectool.c
+++ b/util/ectool.c
@@ -48,26 +48,18 @@ static struct option long_opts[] = {
const char help_str[] =
"Commands:\n"
- " autofanctrl <on>\n"
- " Turn on automatic fan speed control.\n"
- " backlight <enabled>\n"
- " Enable/disable LCD backlight\n"
" battery\n"
" Prints battery info\n"
- " batterycutoff [at-shutdown]\n"
+ " WARNING! batterycutoff [at-shutdown]\n"
" Cut off battery output power\n"
- " batteryparam\n"
+ " ? batteryparam\n"
" Read or write board-specific battery parameter\n"
" boardversion\n"
" Prints the board version\n"
- " cbi\n"
- " Get/Set Cros Board Info\n"
" chargecurrentlimit\n"
" Set the maximum battery charging current\n"
" chargecontrol\n"
" Force the battery to stop charging or discharge\n"
- " chargeoverride\n"
- " Overrides charge port selection logic\n"
" chargestate\n"
" Handle commands related to charge state v2 (and later)\n"
" chipinfo\n"
@@ -76,8 +68,6 @@ const char help_str[] =
" Prints supported version mask for a command number\n"
" console\n"
" Prints the last output to the EC debug console\n"
- " cec\n"
- " Read or write CEC messages and settings\n"
" echash [CMDS]\n"
" Various EC hash commands\n"
" eventclear <mask>\n"
@@ -88,10 +78,6 @@ const char help_str[] =
" Prints raw EC host event flags\n"
" eventgetb\n"
" Prints raw EC host event flags copy B\n"
- " eventgetscimask\n"
- " Prints SCI mask for EC host events\n"
- " eventgetsmimask\n"
- " Prints SMI mask for EC host events\n"
" eventgetwakemask\n"
" Prints wake mask for EC host events\n"
" eventsetscimask <mask>\n"
@@ -102,14 +88,10 @@ const char help_str[] =
" Sets the wake mask for EC host events\n"
" extpwrlimit\n"
" Set the maximum external power limit\n"
- " fanduty <percent>\n"
- " Forces the fan PWM to a constant duty cycle\n"
" flasherase <offset> <size>\n"
" Erases EC flash\n"
" flashinfo\n"
" Prints information on the EC flash\n"
- " flashspiinfo\n"
- " Prints information on EC SPI flash, if present\n"
" flashpd <dev_id> <port> <filename>\n"
" Flash commands over PD\n"
" flashprotect [now] [enable | disable]\n"
@@ -118,16 +100,6 @@ const char help_str[] =
" Reads from EC flash to a file\n"
" flashwrite <offset> <infile>\n"
" Writes to EC flash from a file\n"
- " fpcheckpixels\n"
- " Count the number of dead pixels on the sensor\n"
- " fpframe\n"
- " Retrieve the finger image as a PGM image\n"
- " fpinfo\n"
- " Prints information about the Fingerprint sensor\n"
- " fpmode [capture|deepsleep|fingerdown|fingerup]\n"
- " Configure/Read the fingerprint sensor current mode\n"
- " fptemplate [<infile>|<index 0..2>]\n"
- " Add a template if <infile> is provided, else dump it\n"
" forcelidopen <enable>\n"
" Forces the lid switch to open position\n"
" gpioget <GPIO name>\n"
@@ -164,8 +136,6 @@ const char help_str[] =
" Test low-level key scanning\n"
" led <name> <query | auto | off | <color> | <color>=<value>...>\n"
" Set the color of an LED or query brightness range\n"
- " lightbar [CMDS]\n"
- " Various lightbar control commands\n"
" motionsense [CMDS]\n"
" Various motion sense control commands\n"
" panicinfo\n"
@@ -174,8 +144,6 @@ const char help_str[] =
" Whether or not the AP should pause in S5 on shutdown\n"
" pdcontrol [suspend|resume|reset|disable|on]\n"
" Controls the PD chip\n"
- " pdchipinfo <port>\n"
- " Get PD chip information\n"
" pdlog\n"
" Prints the PD event log entries\n"
" pdwritelog <type> <port>\n"
@@ -184,34 +152,10 @@ const char help_str[] =
" Get All USB-PD alternate SVIDs and modes on <port>\n"
" pdsetmode <port> <svid> <opos>\n"
" Set USB-PD alternate SVID and mode on <port>\n"
- " port80flood\n"
- " Rapidly write bytes to port 80\n"
- " port80read\n"
- " Print history of port 80 write\n"
" powerinfo\n"
" Prints power-related information\n"
" protoinfo\n"
" Prints EC host protocol information\n"
- " pstoreinfo\n"
- " Prints information on the EC host persistent storage\n"
- " pstoreread <offset> <size> <outfile>\n"
- " Reads from EC host persistent storage to a file\n"
- " pstorewrite <offset> <infile>\n"
- " Writes to EC host persistent storage from a file\n"
- " pwmgetfanrpm [<index> | all]\n"
- " Prints current fan RPM\n"
- " pwmgetkblight\n"
- " Prints current keyboard backlight percent\n"
- " pwmgetnumfans\n"
- " Prints the number of fans present\n"
- " pwmgetduty\n"
- " Prints the current 16 bit duty cycle for given PWM\n"
- " pwmsetfanrpm <targetrpm>\n"
- " Set target fan RPM\n"
- " pwmsetkblight <percent>\n"
- " Set keyboard backlight in percent\n"
- " pwmsetduty\n"
- " Set 16 bit duty cycle of given PWM\n"
" readtest <patternoffset> <size>\n"
" Reads a pattern from the EC via LPC\n"
" reboot_ec <RO|RW|cold|hibernate|hibernate-clear-ap-off|disable-jump>"
@@ -231,26 +175,12 @@ const char help_str[] =
" Control the behavior of RWSIG task.\n"
" rwsigstatus\n"
" Run RW signature verification and get status.\n"
- " sertest\n"
- " Serial output test for COM2\n"
" switches\n"
" Prints current EC switch positions\n"
- " temps <sensorid>\n"
- " Print temperature.\n"
- " tempsinfo <sensorid>\n"
- " Print temperature sensor info.\n"
" thermalget <platform-specific args>\n"
" Get the threshold temperature values from the thermal engine.\n"
" thermalset <platform-specific args>\n"
" Set the threshold temperature values for the thermal engine.\n"
- " tpselftest\n"
- " Run touchpad self test.\n"
- " tpframeget\n"
- " Get touchpad frame data.\n"
- " tmp006cal <tmp006_index> [params...]\n"
- " Get/set TMP006 calibration\n"
- " tmp006raw <tmp006_index>\n"
- " Get raw TMP006 data\n"
" usbchargemode <port> <mode>\n"
" Set USB charging mode\n"
" usbmux <mux>\n"
Loading…
Cancel
Save