coreboot/src/include
Nico Huber 029dfff30c i2c: Move to Linux like struct i2c_msg
Our current struct for I2C segments `i2c_seg` was close to being compa-
tible to the Linux version `i2c_msg`, close to being compatible to SMBus
and close to being readable (e.g. what was `chip` supposed to mean?) but
turned out to be hard to fix.

Instead of extending it in a backwards compatible way (and not touching
current controller drivers), replace it with a Linux source compatible
`struct i2c_msg` and patch all the drivers and users with Coccinelle.

The new `struct i2c_msg` should ease porting drivers from Linux and help
to write SMBus compatible controller drivers.

Beside integer type changes, the field `read` is replaced with a generic
field `flags` and `chip` is renamed to `slave`.

Patched with Coccinelle using the clumsy spatch below and some manual
changes:

* Nested struct initializers and one field access skipped by Coccinelle.
* Removed assumption in the code that I2C_M_RD is 1.
* In `i2c.h`, changed all occurences of `chip` to `slave`.

    @@ @@
    -struct i2c_seg
    +struct i2c_msg

    @@ identifier msg; expression e; @@
    (
     struct i2c_msg msg = {
    -    .read = 0,
    +    .flags = 0,
     };
    |
     struct i2c_msg msg = {
    -    .read = 1,
    +    .flags = I2C_M_RD,
     };
    |
     struct i2c_msg msg = {
    -    .chip = e,
    +    .slave = e,
     };
    )

    @@ struct i2c_msg msg; statement S1, S2; @@
    (
    -if (msg.read)
    +if (msg.flags & I2C_M_RD)
     S1 else S2
    |
    -if (msg.read)
    +if (msg.flags & I2C_M_RD)
     S1
    )

    @@ struct i2c_msg *msg; statement S1, S2; @@
    (
    -if (msg->read)
    +if (msg->flags & I2C_M_RD)
     S1 else S2
    |
    -if (msg->read)
    +if (msg->flags & I2C_M_RD)
     S1
    )

    @@ struct i2c_msg msg; expression e; @@
    (
    -msg.read = 0;
    +msg.flags = 0;
    |
    -msg.read = 1;
    +msg.flags = I2C_M_RD;
    |
    -msg.read = e;
    +msg.flags = e ? I2C_M_RD : 0;
    |
    -!!(msg.read)
    +(msg.flags & I2C_M_RD)
    |
    -(msg.read)
    +(msg.flags & I2C_M_RD)
    )

    @@ struct i2c_msg *msg; expression e; @@
    (
    -msg->read = 0;
    +msg->flags = 0;
    |
    -msg->read = 1;
    +msg->flags = I2C_M_RD;
    |
    -msg->read = e;
    +msg->flags = e ? I2C_M_RD : 0;
    |
    -!!(msg->read)
    +(msg->flags & I2C_M_RD)
    |
    -(msg->read)
    +(msg->flags & I2C_M_RD)
    )

    @@ struct i2c_msg msg; @@
    -msg.chip
    +msg.slave

    @@ struct i2c_msg *msg; expression e; @@
    -msg[e].chip
    +msg[e].slave

    @ slave disable ptr_to_array @ struct i2c_msg *msg; @@
    -msg->chip
    +msg->slave

Change-Id: Ifd7cabf0a18ffd7a1def25d1d7059b713d0b7ea9
Signed-off-by: Nico Huber <nico.huber@secunet.com>
Reviewed-on: https://review.coreboot.org/20542
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Aaron Durbin <adurbin@chromium.org>
Reviewed-by: Werner Zeh <werner.zeh@siemens.com>
Reviewed-by: Kyösti Mälkki <kyosti.malkki@gmail.com>
Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net>
2017-08-14 18:07:30 +00:00
..
boot coreboot_tables: specify clear interface for lb_framebuffer() 2017-05-18 15:42:23 +02:00
console console: Add weak method to notify about death 2017-08-14 11:01:41 +00:00
cpu src/include: Add guards on all header files 2017-08-01 23:04:15 +00:00
device i2c: Move to Linux like struct i2c_msg 2017-08-14 18:07:30 +00:00
pc80 Port cmos.default handling to C environment bootblock 2017-07-26 19:30:01 +00:00
smp src/include: add IS_ENABLED() around Kconfig symbol references 2017-07-13 23:55:05 +00:00
superio tree: drop last paragraph of GPL copyright header 2015-10-31 21:37:39 +01:00
sys src/include: Add guards on all header files 2017-08-01 23:04:15 +00:00
tpm_lite cr50: add unmarshaling of vendor commands and process 'enable_update' 2017-03-23 23:49:58 +01:00
adainit.h Add option to use Ada code in ramstage 2016-11-06 17:28:13 +01:00
antirollback.h src/vboot: mark factory_initialze_tpm() as static 2016-11-11 18:53:33 +01:00
assert.h assert: Add new dead_code() macro to assert dead code paths 2017-07-16 23:56:34 +00:00
b64_decode.h lib: add base64 decoder 2015-04-22 08:50:54 +02:00
base3.h tree: drop last paragraph of GPL copyright header 2015-10-31 21:37:39 +01:00
bcd.h tree: drop last paragraph of GPL copyright header 2015-10-31 21:37:39 +01:00
boardid.h tree: drop last paragraph of GPL copyright header 2015-10-31 21:37:39 +01:00
boot_device.h lib/boot_device: add RW boot device construct 2016-08-19 03:07:05 +02:00
bootblock_common.h src/include: Move storage class to beginning of declaration 2017-03-13 17:19:45 +01:00
bootmem.h lib/bootmem: allow architecture specific bootmem ranges 2016-04-21 20:46:45 +02:00
bootmode.h vboot: Remove get_sw_write_protect_state callback 2017-07-18 23:24:01 +00:00
bootstate.h Rename __attribute__((packed)) --> __packed 2017-07-13 19:45:59 +00:00
cbfs.h src/include: Wrap lines at 80 columns 2017-03-13 17:23:37 +01:00
cbmem.h lib/cbmem: provide optional cbmem top initialization hook 2017-08-04 04:29:57 +00:00
compiler.h add __must_check to */compiler.h 2017-08-08 18:18:03 +00:00
delay.h src/include: Fix unsigned warnings 2017-03-09 17:16:09 +01:00
edid.h lib/edid: Split out fill_lb_framebuffer() 2017-05-30 18:32:44 +02:00
elog.h driver/intel/wifi: Update wifi wake source in elog 2017-07-28 16:27:18 +00:00
endian.h tree: drop last paragraph of GPL copyright header 2015-10-31 21:37:39 +01:00
fallback.h pc80: Move set_boot_successful() 2016-12-13 19:15:22 +01:00
fmap.h lib/fmap: provide RW region device support 2016-08-19 18:17:04 +02:00
gic.h src/include: Capitalize CPU, RAM and ROM 2016-07-31 18:30:16 +02:00
gpio.h lib/gpio: add pullup & pulldown gpio_base2_value() variants 2016-07-07 20:44:36 +02:00
halt.h lib: add poweroff() declaration 2016-07-15 08:35:15 +02:00
imd.h cbmem: add coreboot table records for each cbmem entry 2015-11-03 00:19:46 +01:00
inttypes.h x86: provide more C standard environment 2013-03-20 04:20:25 +01:00
ip_checksum.h src/include: Wrap lines at 80 columns 2017-03-13 17:23:37 +01:00
kconfig.h Add config_enabled() from Linux 2012-05-08 00:36:09 +02:00
lib.h lib: remove ulzma() 2016-07-01 23:55:16 +02:00
main_decl.h arches: lib: add main_decl.h for main() declaration 2016-02-11 23:29:08 +01:00
memlayout.h vboot: Move remaining features out of vendorcode/google/chromeos 2017-03-28 22:18:13 +02:00
memory_info.h Rename __attribute__((packed)) --> __packed 2017-07-13 19:45:59 +00:00
memrange.h src: change coreboot to lowercase 2017-06-07 12:09:15 +02:00
nhlt.h src/include: Wrap lines at 80 columns 2017-03-13 17:23:37 +01:00
option.h src/include: add IS_ENABLED() around Kconfig symbol references 2017-07-13 23:55:05 +00:00
program_loading.h ACPI S3: Remove HIGH_MEMORY_SAVE where possible 2016-11-09 20:52:07 +01:00
random.h arch/x86: add functions to generate random numbers 2017-02-20 04:46:10 +01:00
reg_script.h Rename __attribute__((packed)) --> __packed 2017-07-13 19:45:59 +00:00
region_file.h lib: add region file support 2016-12-08 16:10:28 +01:00
reset.h Consolidate reset API, add generic reset_prepare mechanism 2017-06-13 20:53:09 +02:00
rmodule.h src/include: Remove space after function name 2017-03-13 17:19:16 +01:00
romstage_handoff.h lib: put romstage_handoff implementation in own compilation unit 2016-12-01 08:16:47 +01:00
rtc.h src/include: Open brace on same line as enum or struct 2017-03-12 15:46:23 +01:00
rules.h Stage rules.h: Add ENV_LIBAGESA 2017-03-07 00:43:20 +01:00
sar.h chromeos: Implement locating and decoding wifi sar data from VPD 2017-01-09 18:16:10 +01:00
sdram_mode.h src/include: Remove spaces before tabs 2017-03-12 15:45:37 +01:00
smbios.h SMBIOS: Correct length calculation for empty string table 2017-08-10 15:56:45 +00:00
spd.h src/include: Wrap lines at 80 columns 2017-03-13 17:23:37 +01:00
spd_bin.h lib/spd_bin: Use proper I2C addresses 2017-06-29 15:41:02 +00:00
spd_ddr2.h src/include: Add guards on all header files 2017-08-01 23:04:15 +00:00
spi-generic.h drivers/spi/spi_flash: Clean up SPI flash probe 2017-05-19 21:23:11 +02:00
spi_flash.h drivers/spi/spi_flash: Move flash ops to spi_flash_ops structure 2017-05-19 21:23:39 +02:00
stage_cache.h arch/x86: cache postcar in stage cache 2016-12-01 08:17:19 +01:00
stddef.h src/include: add IS_ENABLED() around Kconfig symbol references 2017-07-13 23:55:05 +00:00
stdlib.h src/include: Add space after comma 2017-03-09 17:19:16 +01:00
string.h src/include: Move assignment out of if condition 2017-03-13 17:20:43 +01:00
swab.h src/include: Remove unnecessary typecast 2017-03-13 17:20:15 +01:00
symbols.h src/include: Remove spaces before ( and after ) 2017-03-12 15:45:26 +01:00
thread.h src/include: add IS_ENABLED() around Kconfig symbol references 2017-07-13 23:55:05 +00:00
timer.h src/include: Indent code using tabs 2017-03-09 17:18:42 +01:00
timestamp.h timestamp: Apply factor to recorded stamps 2017-07-27 06:55:03 +00:00
tpm.h drivers/spi/tpm: Clean up SPI TPM driver 2017-04-13 05:04:13 +02:00
trace.h src/include: add IS_ENABLED() around Kconfig symbol references 2017-07-13 23:55:05 +00:00
types.h src: change coreboot to lowercase 2017-06-07 12:09:15 +02:00
vbe.h Rename __attribute__((packed)) --> __packed 2017-07-13 19:45:59 +00:00
version.h build.h: remove variable for the builduser, -hostname and -domain 2015-03-09 17:53:16 +01:00
watchdog.h src/include: add IS_ENABLED() around Kconfig symbol references 2017-07-13 23:55:05 +00:00
wrdd.h Remove extra newlines from the end of all coreboot files. 2016-07-31 18:19:33 +02:00