Re: [PATCH v14 2/9] fw_cfg: add a public uapi header

2018-02-15 Thread Marc-André Lureau
Hi

On Thu, Feb 15, 2018 at 7:20 PM, Michael S. Tsirkin  wrote:
> On Thu, Feb 15, 2018 at 10:25:27AM +0100, Marc-Andre Lureau wrote:
>> Hi
>>
>> On Wed, Feb 14, 2018 at 9:41 PM, Michael S. Tsirkin  wrote:
>> > On Wed, Feb 14, 2018 at 03:18:43PM +0100, Marc-André Lureau wrote:
>> >> Create a common header file for well-known values and structures to be
>> >> shared by the Linux kernel with qemu or other projects.
>> >>
>> >> Suggested-by: Michael S. Tsirkin 
>> >> Signed-off-by: Marc-André Lureau 
>> >>
>> >> ---
>> >>
>> >> The related qemu patch making use of it, to be submitted:
>> >> https://github.com/elmarco/qemu/commit/4884fc9e9c4c4467a371e5a40f3181239e1b70f5
>> >> ---
>> >>  MAINTAINERS|   1 +
>> >>  drivers/firmware/qemu_fw_cfg.c |  22 +
>> >>  include/uapi/linux/fw_cfg.h| 102 
>> >> +
>> >>  3 files changed, 105 insertions(+), 20 deletions(-)
>> >>  create mode 100644 include/uapi/linux/fw_cfg.h
>> >>
>> >> diff --git a/MAINTAINERS b/MAINTAINERS
>> >> index 3bdc260e36b7..a66b65f62811 100644
>> >> --- a/MAINTAINERS
>> >> +++ b/MAINTAINERS
>> >> @@ -11352,6 +11352,7 @@ M:"Michael S. Tsirkin" 
>> >>  L:   qemu-de...@nongnu.org
>> >>  S:   Maintained
>> >>  F:   drivers/firmware/qemu_fw_cfg.c
>> >> +F:   include/uapi/linux/fw_cfg.h
>> >>
>> >>  QIB DRIVER
>> >>  M:   Dennis Dalessandro 
>> >> diff --git a/drivers/firmware/qemu_fw_cfg.c 
>> >> b/drivers/firmware/qemu_fw_cfg.c
>> >> index a41b572eeeb1..90f467232777 100644
>> >> --- a/drivers/firmware/qemu_fw_cfg.c
>> >> +++ b/drivers/firmware/qemu_fw_cfg.c
>> >> @@ -32,30 +32,12 @@
>> >>  #include 
>> >>  #include 
>> >>  #include 
>> >> +#include 
>> >>
>> >>  MODULE_AUTHOR("Gabriel L. Somlo ");
>> >>  MODULE_DESCRIPTION("QEMU fw_cfg sysfs support");
>> >>  MODULE_LICENSE("GPL");
>> >>
>> >> -/* selector key values for "well-known" fw_cfg entries */
>> >> -#define FW_CFG_SIGNATURE  0x00
>> >> -#define FW_CFG_ID 0x01
>> >> -#define FW_CFG_FILE_DIR   0x19
>> >> -
>> >> -/* size in bytes of fw_cfg signature */
>> >> -#define FW_CFG_SIG_SIZE 4
>> >> -
>> >> -/* fw_cfg "file name" is up to 56 characters (including terminating nul) 
>> >> */
>> >> -#define FW_CFG_MAX_FILE_PATH 56
>> >> -
>> >> -/* fw_cfg file directory entry type */
>> >> -struct fw_cfg_file {
>> >> - u32 size;
>> >> - u16 select;
>> >> - u16 reserved;
>> >> - char name[FW_CFG_MAX_FILE_PATH];
>> >> -};
>> >> -
>> >>  /* fw_cfg device i/o register addresses */
>> >>  static bool fw_cfg_is_mmio;
>> >>  static phys_addr_t fw_cfg_p_base;
>> >> @@ -597,7 +579,7 @@ MODULE_DEVICE_TABLE(of, fw_cfg_sysfs_mmio_match);
>> >>
>> >>  #ifdef CONFIG_ACPI
>> >>  static const struct acpi_device_id fw_cfg_sysfs_acpi_match[] = {
>> >> - { "QEMU0002", },
>> >> + { FW_CFG_ACPI_DEVICE_ID, },
>> >>   {},
>> >>  };
>> >>  MODULE_DEVICE_TABLE(acpi, fw_cfg_sysfs_acpi_match);
>> >> diff --git a/include/uapi/linux/fw_cfg.h b/include/uapi/linux/fw_cfg.h
>> >> new file mode 100644
>> >> index ..5b8136ce46ee
>> >> --- /dev/null
>> >> +++ b/include/uapi/linux/fw_cfg.h
>> >> @@ -0,0 +1,102 @@
>> >> +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
>> >> +#ifndef _LINUX_FW_CFG_H
>> >> +#define _LINUX_FW_CFG_H
>> >> +
>> >> +#include 
>> >> +
>> >> +#define FW_CFG_ACPI_DEVICE_ID"QEMU0002"
>> >> +
>> >> +/* selector key values for "well-known" fw_cfg entries */
>> >> +#define FW_CFG_SIGNATURE 0x00
>> >> +#define FW_CFG_ID0x01
>> >> +#define FW_CFG_UUID  0x02
>> >> +#define FW_CFG_RAM_SIZE  0x03
>> >> +#define FW_CFG_NOGRAPHIC 0x04
>> >> +#define FW_CFG_NB_CPUS   0x05
>> >> +#define FW_CFG_MACHINE_ID0x06
>> >> +#define FW_CFG_KERNEL_ADDR   0x07
>> >> +#define FW_CFG_KERNEL_SIZE   0x08
>> >> +#define FW_CFG_KERNEL_CMDLINE0x09
>> >> +#define FW_CFG_INITRD_ADDR   0x0a
>> >> +#define FW_CFG_INITRD_SIZE   0x0b
>> >> +#define FW_CFG_BOOT_DEVICE   0x0c
>> >> +#define FW_CFG_NUMA  0x0d
>> >> +#define FW_CFG_BOOT_MENU 0x0e
>> >> +#define FW_CFG_MAX_CPUS  0x0f
>> >> +#define FW_CFG_KERNEL_ENTRY  0x10
>> >> +#define FW_CFG_KERNEL_DATA   0x11
>> >> +#define FW_CFG_INITRD_DATA   0x12
>> >> +#define FW_CFG_CMDLINE_ADDR  0x13
>> >> +#define FW_CFG_CMDLINE_SIZE  0x14
>> >> +#define FW_CFG_CMDLINE_DATA  0x15
>> >> +#define FW_CFG_SETUP_ADDR0x16
>> >> +#define FW_CFG_SETUP_SIZE0x17
>> >> +#define FW_CFG_SETUP_DATA0x18
>> >> +#define FW_CFG_FILE_DIR  0x19
>> >> +
>> >> +#define FW_CFG_FILE_FIRST0x20
>> >> +#define FW_CFG_FILE_SLOTS_MIN0x10
>> >> +
>> >> +#define FW_CFG_WRITE_CHANNEL 0x4000
>> >> +#define FW_CFG_ARCH_LOCAL0x8000
>> >> +#define FW_CFG_ENTRY_MASK(~(FW_CFG_WRITE_CHANNEL | 
>> >> FW_CFG_ARCH_LOCAL))
>> >> +
>> >> +#define FW_CFG_INVALID   0x
>> >> +
>> >> +/* width in bytes of fw_cfg control register */
>> >> +#define FW_CFG_CTL_SIZE 

Re: [PATCH v14 2/9] fw_cfg: add a public uapi header

2018-02-15 Thread Michael S. Tsirkin
On Thu, Feb 15, 2018 at 10:29:33AM +0100, Marc-Andre Lureau wrote:
> Hi
> 
> On Wed, Feb 14, 2018 at 8:37 PM, Michael S. Tsirkin  wrote:
> > On Wed, Feb 14, 2018 at 03:18:43PM +0100, Marc-André Lureau wrote:
> >> Create a common header file for well-known values and structures to be
> >> shared by the Linux kernel with qemu or other projects.
> >>
> >> Suggested-by: Michael S. Tsirkin 
> >> Signed-off-by: Marc-André Lureau 
> >>
> >> ---
> >>
> >> The related qemu patch making use of it, to be submitted:
> >> https://github.com/elmarco/qemu/commit/4884fc9e9c4c4467a371e5a40f3181239e1b70f5
> >> ---
> >>  MAINTAINERS|   1 +
> >>  drivers/firmware/qemu_fw_cfg.c |  22 +
> >>  include/uapi/linux/fw_cfg.h| 102 
> >> +
> >>  3 files changed, 105 insertions(+), 20 deletions(-)
> >>  create mode 100644 include/uapi/linux/fw_cfg.h
> >>
> >> diff --git a/MAINTAINERS b/MAINTAINERS
> >> index 3bdc260e36b7..a66b65f62811 100644
> >> --- a/MAINTAINERS
> >> +++ b/MAINTAINERS
> >> @@ -11352,6 +11352,7 @@ M:"Michael S. Tsirkin" 
> >>  L:   qemu-de...@nongnu.org
> >>  S:   Maintained
> >>  F:   drivers/firmware/qemu_fw_cfg.c
> >> +F:   include/uapi/linux/fw_cfg.h
> >>
> >>  QIB DRIVER
> >>  M:   Dennis Dalessandro 
> >> diff --git a/drivers/firmware/qemu_fw_cfg.c 
> >> b/drivers/firmware/qemu_fw_cfg.c
> >> index a41b572eeeb1..90f467232777 100644
> >> --- a/drivers/firmware/qemu_fw_cfg.c
> >> +++ b/drivers/firmware/qemu_fw_cfg.c
> >> @@ -32,30 +32,12 @@
> >>  #include 
> >>  #include 
> >>  #include 
> >> +#include 
> >
> > You include the header from include/linux/fw_cfg.h ...
> >
> >>
> >>  MODULE_AUTHOR("Gabriel L. Somlo ");
> >>  MODULE_DESCRIPTION("QEMU fw_cfg sysfs support");
> >>  MODULE_LICENSE("GPL");
> >>
> >> -/* selector key values for "well-known" fw_cfg entries */
> >> -#define FW_CFG_SIGNATURE  0x00
> >> -#define FW_CFG_ID 0x01
> >> -#define FW_CFG_FILE_DIR   0x19
> >> -
> >> -/* size in bytes of fw_cfg signature */
> >> -#define FW_CFG_SIG_SIZE 4
> >> -
> >> -/* fw_cfg "file name" is up to 56 characters (including terminating nul) 
> >> */
> >> -#define FW_CFG_MAX_FILE_PATH 56
> >> -
> >> -/* fw_cfg file directory entry type */
> >> -struct fw_cfg_file {
> >> - u32 size;
> >> - u16 select;
> >> - u16 reserved;
> >> - char name[FW_CFG_MAX_FILE_PATH];
> >> -};
> >> -
> >>  /* fw_cfg device i/o register addresses */
> >>  static bool fw_cfg_is_mmio;
> >>  static phys_addr_t fw_cfg_p_base;
> >> @@ -597,7 +579,7 @@ MODULE_DEVICE_TABLE(of, fw_cfg_sysfs_mmio_match);
> >>
> >>  #ifdef CONFIG_ACPI
> >>  static const struct acpi_device_id fw_cfg_sysfs_acpi_match[] = {
> >> - { "QEMU0002", },
> >> + { FW_CFG_ACPI_DEVICE_ID, },
> >>   {},
> >>  };
> >>  MODULE_DEVICE_TABLE(acpi, fw_cfg_sysfs_acpi_match);
> >> diff --git a/include/uapi/linux/fw_cfg.h b/include/uapi/linux/fw_cfg.h
> >> new file mode 100644
> >> index ..5b8136ce46ee
> >> --- /dev/null
> >> +++ b/include/uapi/linux/fw_cfg.h
> >
> > Yet the header is located in include/uapi/linux/fw_cfg.h
> >
> > How can this work?
> >
> 
> $ make drivers/firmware/qemu_fw_cfg.ko V=1
> 
> gcc -Wp,-MD,drivers/firmware/.qemu_fw_cfg.o.d  -nostdinc -isystem
> /usr/lib/gcc/x86_64-redhat-linux/7/include -I./arch/x86/include
> -I./arch/x86/include/generated  -I./include -I./arch/x86/include/uapi
> ...

Oh an out of tree build.
Try to build whole kernel and it will fail.


> >> @@ -0,0 +1,102 @@
> >> +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
> >
> > As far as I can see these have all been lifted from a BSD-licensed
> > hw/nvram/fw_cfg.c in qemu. So please make it BSD accordingly,
> > and include the explanation in the commit log.
> >
> 
> (see other reply)
> 
> >> +#ifndef _LINUX_FW_CFG_H
> >> +#define _LINUX_FW_CFG_H
> >> +
> >> +#include 
> >> +
> >> +#define FW_CFG_ACPI_DEVICE_ID"QEMU0002"
> >> +
> >> +/* selector key values for "well-known" fw_cfg entries */
> >> +#define FW_CFG_SIGNATURE 0x00
> >> +#define FW_CFG_ID0x01
> >> +#define FW_CFG_UUID  0x02
> >> +#define FW_CFG_RAM_SIZE  0x03
> >> +#define FW_CFG_NOGRAPHIC 0x04
> >> +#define FW_CFG_NB_CPUS   0x05
> >> +#define FW_CFG_MACHINE_ID0x06
> >> +#define FW_CFG_KERNEL_ADDR   0x07
> >> +#define FW_CFG_KERNEL_SIZE   0x08
> >> +#define FW_CFG_KERNEL_CMDLINE0x09
> >> +#define FW_CFG_INITRD_ADDR   0x0a
> >> +#define FW_CFG_INITRD_SIZE   0x0b
> >> +#define FW_CFG_BOOT_DEVICE   0x0c
> >> +#define FW_CFG_NUMA  0x0d
> >> +#define FW_CFG_BOOT_MENU 0x0e
> >> +#define FW_CFG_MAX_CPUS  0x0f
> >> +#define FW_CFG_KERNEL_ENTRY  0x10
> >> +#define FW_CFG_KERNEL_DATA   0x11
> >> +#define FW_CFG_INITRD_DATA   0x12
> >> +#define FW_CFG_CMDLINE_ADDR  0x13
> >> +#define FW_CFG_CMDLINE_SIZE  0x14
> >> +#define FW_CFG_CMDLINE_DATA  0x15
> >> +#define FW_CFG_SETUP_ADDR0x16
> >> +#define FW_CFG_SETUP_SIZE0x17
>

Re: [PATCH v14 2/9] fw_cfg: add a public uapi header

2018-02-15 Thread Michael S. Tsirkin
On Thu, Feb 15, 2018 at 10:25:27AM +0100, Marc-Andre Lureau wrote:
> Hi
> 
> On Wed, Feb 14, 2018 at 9:41 PM, Michael S. Tsirkin  wrote:
> > On Wed, Feb 14, 2018 at 03:18:43PM +0100, Marc-André Lureau wrote:
> >> Create a common header file for well-known values and structures to be
> >> shared by the Linux kernel with qemu or other projects.
> >>
> >> Suggested-by: Michael S. Tsirkin 
> >> Signed-off-by: Marc-André Lureau 
> >>
> >> ---
> >>
> >> The related qemu patch making use of it, to be submitted:
> >> https://github.com/elmarco/qemu/commit/4884fc9e9c4c4467a371e5a40f3181239e1b70f5
> >> ---
> >>  MAINTAINERS|   1 +
> >>  drivers/firmware/qemu_fw_cfg.c |  22 +
> >>  include/uapi/linux/fw_cfg.h| 102 
> >> +
> >>  3 files changed, 105 insertions(+), 20 deletions(-)
> >>  create mode 100644 include/uapi/linux/fw_cfg.h
> >>
> >> diff --git a/MAINTAINERS b/MAINTAINERS
> >> index 3bdc260e36b7..a66b65f62811 100644
> >> --- a/MAINTAINERS
> >> +++ b/MAINTAINERS
> >> @@ -11352,6 +11352,7 @@ M:"Michael S. Tsirkin" 
> >>  L:   qemu-de...@nongnu.org
> >>  S:   Maintained
> >>  F:   drivers/firmware/qemu_fw_cfg.c
> >> +F:   include/uapi/linux/fw_cfg.h
> >>
> >>  QIB DRIVER
> >>  M:   Dennis Dalessandro 
> >> diff --git a/drivers/firmware/qemu_fw_cfg.c 
> >> b/drivers/firmware/qemu_fw_cfg.c
> >> index a41b572eeeb1..90f467232777 100644
> >> --- a/drivers/firmware/qemu_fw_cfg.c
> >> +++ b/drivers/firmware/qemu_fw_cfg.c
> >> @@ -32,30 +32,12 @@
> >>  #include 
> >>  #include 
> >>  #include 
> >> +#include 
> >>
> >>  MODULE_AUTHOR("Gabriel L. Somlo ");
> >>  MODULE_DESCRIPTION("QEMU fw_cfg sysfs support");
> >>  MODULE_LICENSE("GPL");
> >>
> >> -/* selector key values for "well-known" fw_cfg entries */
> >> -#define FW_CFG_SIGNATURE  0x00
> >> -#define FW_CFG_ID 0x01
> >> -#define FW_CFG_FILE_DIR   0x19
> >> -
> >> -/* size in bytes of fw_cfg signature */
> >> -#define FW_CFG_SIG_SIZE 4
> >> -
> >> -/* fw_cfg "file name" is up to 56 characters (including terminating nul) 
> >> */
> >> -#define FW_CFG_MAX_FILE_PATH 56
> >> -
> >> -/* fw_cfg file directory entry type */
> >> -struct fw_cfg_file {
> >> - u32 size;
> >> - u16 select;
> >> - u16 reserved;
> >> - char name[FW_CFG_MAX_FILE_PATH];
> >> -};
> >> -
> >>  /* fw_cfg device i/o register addresses */
> >>  static bool fw_cfg_is_mmio;
> >>  static phys_addr_t fw_cfg_p_base;
> >> @@ -597,7 +579,7 @@ MODULE_DEVICE_TABLE(of, fw_cfg_sysfs_mmio_match);
> >>
> >>  #ifdef CONFIG_ACPI
> >>  static const struct acpi_device_id fw_cfg_sysfs_acpi_match[] = {
> >> - { "QEMU0002", },
> >> + { FW_CFG_ACPI_DEVICE_ID, },
> >>   {},
> >>  };
> >>  MODULE_DEVICE_TABLE(acpi, fw_cfg_sysfs_acpi_match);
> >> diff --git a/include/uapi/linux/fw_cfg.h b/include/uapi/linux/fw_cfg.h
> >> new file mode 100644
> >> index ..5b8136ce46ee
> >> --- /dev/null
> >> +++ b/include/uapi/linux/fw_cfg.h
> >> @@ -0,0 +1,102 @@
> >> +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
> >> +#ifndef _LINUX_FW_CFG_H
> >> +#define _LINUX_FW_CFG_H
> >> +
> >> +#include 
> >> +
> >> +#define FW_CFG_ACPI_DEVICE_ID"QEMU0002"
> >> +
> >> +/* selector key values for "well-known" fw_cfg entries */
> >> +#define FW_CFG_SIGNATURE 0x00
> >> +#define FW_CFG_ID0x01
> >> +#define FW_CFG_UUID  0x02
> >> +#define FW_CFG_RAM_SIZE  0x03
> >> +#define FW_CFG_NOGRAPHIC 0x04
> >> +#define FW_CFG_NB_CPUS   0x05
> >> +#define FW_CFG_MACHINE_ID0x06
> >> +#define FW_CFG_KERNEL_ADDR   0x07
> >> +#define FW_CFG_KERNEL_SIZE   0x08
> >> +#define FW_CFG_KERNEL_CMDLINE0x09
> >> +#define FW_CFG_INITRD_ADDR   0x0a
> >> +#define FW_CFG_INITRD_SIZE   0x0b
> >> +#define FW_CFG_BOOT_DEVICE   0x0c
> >> +#define FW_CFG_NUMA  0x0d
> >> +#define FW_CFG_BOOT_MENU 0x0e
> >> +#define FW_CFG_MAX_CPUS  0x0f
> >> +#define FW_CFG_KERNEL_ENTRY  0x10
> >> +#define FW_CFG_KERNEL_DATA   0x11
> >> +#define FW_CFG_INITRD_DATA   0x12
> >> +#define FW_CFG_CMDLINE_ADDR  0x13
> >> +#define FW_CFG_CMDLINE_SIZE  0x14
> >> +#define FW_CFG_CMDLINE_DATA  0x15
> >> +#define FW_CFG_SETUP_ADDR0x16
> >> +#define FW_CFG_SETUP_SIZE0x17
> >> +#define FW_CFG_SETUP_DATA0x18
> >> +#define FW_CFG_FILE_DIR  0x19
> >> +
> >> +#define FW_CFG_FILE_FIRST0x20
> >> +#define FW_CFG_FILE_SLOTS_MIN0x10
> >> +
> >> +#define FW_CFG_WRITE_CHANNEL 0x4000
> >> +#define FW_CFG_ARCH_LOCAL0x8000
> >> +#define FW_CFG_ENTRY_MASK(~(FW_CFG_WRITE_CHANNEL | FW_CFG_ARCH_LOCAL))
> >> +
> >> +#define FW_CFG_INVALID   0x
> >> +
> >> +/* width in bytes of fw_cfg control register */
> >> +#define FW_CFG_CTL_SIZE  0x02
> >> +
> >> +/* fw_cfg "file name" is up to 56 characters (including terminating nul) 
> >> */
> >> +#define FW_CFG_MAX_FILE_PATH 56
> >> +
> >> +/* size in bytes of fw_cfg signature */
> >> +#define 

Re: [PATCH v14 2/9] fw_cfg: add a public uapi header

2018-02-15 Thread Marc-Andre Lureau
Hi

On Wed, Feb 14, 2018 at 8:37 PM, Michael S. Tsirkin  wrote:
> On Wed, Feb 14, 2018 at 03:18:43PM +0100, Marc-André Lureau wrote:
>> Create a common header file for well-known values and structures to be
>> shared by the Linux kernel with qemu or other projects.
>>
>> Suggested-by: Michael S. Tsirkin 
>> Signed-off-by: Marc-André Lureau 
>>
>> ---
>>
>> The related qemu patch making use of it, to be submitted:
>> https://github.com/elmarco/qemu/commit/4884fc9e9c4c4467a371e5a40f3181239e1b70f5
>> ---
>>  MAINTAINERS|   1 +
>>  drivers/firmware/qemu_fw_cfg.c |  22 +
>>  include/uapi/linux/fw_cfg.h| 102 
>> +
>>  3 files changed, 105 insertions(+), 20 deletions(-)
>>  create mode 100644 include/uapi/linux/fw_cfg.h
>>
>> diff --git a/MAINTAINERS b/MAINTAINERS
>> index 3bdc260e36b7..a66b65f62811 100644
>> --- a/MAINTAINERS
>> +++ b/MAINTAINERS
>> @@ -11352,6 +11352,7 @@ M:"Michael S. Tsirkin" 
>>  L:   qemu-de...@nongnu.org
>>  S:   Maintained
>>  F:   drivers/firmware/qemu_fw_cfg.c
>> +F:   include/uapi/linux/fw_cfg.h
>>
>>  QIB DRIVER
>>  M:   Dennis Dalessandro 
>> diff --git a/drivers/firmware/qemu_fw_cfg.c b/drivers/firmware/qemu_fw_cfg.c
>> index a41b572eeeb1..90f467232777 100644
>> --- a/drivers/firmware/qemu_fw_cfg.c
>> +++ b/drivers/firmware/qemu_fw_cfg.c
>> @@ -32,30 +32,12 @@
>>  #include 
>>  #include 
>>  #include 
>> +#include 
>
> You include the header from include/linux/fw_cfg.h ...
>
>>
>>  MODULE_AUTHOR("Gabriel L. Somlo ");
>>  MODULE_DESCRIPTION("QEMU fw_cfg sysfs support");
>>  MODULE_LICENSE("GPL");
>>
>> -/* selector key values for "well-known" fw_cfg entries */
>> -#define FW_CFG_SIGNATURE  0x00
>> -#define FW_CFG_ID 0x01
>> -#define FW_CFG_FILE_DIR   0x19
>> -
>> -/* size in bytes of fw_cfg signature */
>> -#define FW_CFG_SIG_SIZE 4
>> -
>> -/* fw_cfg "file name" is up to 56 characters (including terminating nul) */
>> -#define FW_CFG_MAX_FILE_PATH 56
>> -
>> -/* fw_cfg file directory entry type */
>> -struct fw_cfg_file {
>> - u32 size;
>> - u16 select;
>> - u16 reserved;
>> - char name[FW_CFG_MAX_FILE_PATH];
>> -};
>> -
>>  /* fw_cfg device i/o register addresses */
>>  static bool fw_cfg_is_mmio;
>>  static phys_addr_t fw_cfg_p_base;
>> @@ -597,7 +579,7 @@ MODULE_DEVICE_TABLE(of, fw_cfg_sysfs_mmio_match);
>>
>>  #ifdef CONFIG_ACPI
>>  static const struct acpi_device_id fw_cfg_sysfs_acpi_match[] = {
>> - { "QEMU0002", },
>> + { FW_CFG_ACPI_DEVICE_ID, },
>>   {},
>>  };
>>  MODULE_DEVICE_TABLE(acpi, fw_cfg_sysfs_acpi_match);
>> diff --git a/include/uapi/linux/fw_cfg.h b/include/uapi/linux/fw_cfg.h
>> new file mode 100644
>> index ..5b8136ce46ee
>> --- /dev/null
>> +++ b/include/uapi/linux/fw_cfg.h
>
> Yet the header is located in include/uapi/linux/fw_cfg.h
>
> How can this work?
>

$ make drivers/firmware/qemu_fw_cfg.ko V=1

gcc -Wp,-MD,drivers/firmware/.qemu_fw_cfg.o.d  -nostdinc -isystem
/usr/lib/gcc/x86_64-redhat-linux/7/include -I./arch/x86/include
-I./arch/x86/include/generated  -I./include -I./arch/x86/include/uapi
...

>> @@ -0,0 +1,102 @@
>> +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
>
> As far as I can see these have all been lifted from a BSD-licensed
> hw/nvram/fw_cfg.c in qemu. So please make it BSD accordingly,
> and include the explanation in the commit log.
>

(see other reply)

>> +#ifndef _LINUX_FW_CFG_H
>> +#define _LINUX_FW_CFG_H
>> +
>> +#include 
>> +
>> +#define FW_CFG_ACPI_DEVICE_ID"QEMU0002"
>> +
>> +/* selector key values for "well-known" fw_cfg entries */
>> +#define FW_CFG_SIGNATURE 0x00
>> +#define FW_CFG_ID0x01
>> +#define FW_CFG_UUID  0x02
>> +#define FW_CFG_RAM_SIZE  0x03
>> +#define FW_CFG_NOGRAPHIC 0x04
>> +#define FW_CFG_NB_CPUS   0x05
>> +#define FW_CFG_MACHINE_ID0x06
>> +#define FW_CFG_KERNEL_ADDR   0x07
>> +#define FW_CFG_KERNEL_SIZE   0x08
>> +#define FW_CFG_KERNEL_CMDLINE0x09
>> +#define FW_CFG_INITRD_ADDR   0x0a
>> +#define FW_CFG_INITRD_SIZE   0x0b
>> +#define FW_CFG_BOOT_DEVICE   0x0c
>> +#define FW_CFG_NUMA  0x0d
>> +#define FW_CFG_BOOT_MENU 0x0e
>> +#define FW_CFG_MAX_CPUS  0x0f
>> +#define FW_CFG_KERNEL_ENTRY  0x10
>> +#define FW_CFG_KERNEL_DATA   0x11
>> +#define FW_CFG_INITRD_DATA   0x12
>> +#define FW_CFG_CMDLINE_ADDR  0x13
>> +#define FW_CFG_CMDLINE_SIZE  0x14
>> +#define FW_CFG_CMDLINE_DATA  0x15
>> +#define FW_CFG_SETUP_ADDR0x16
>> +#define FW_CFG_SETUP_SIZE0x17
>> +#define FW_CFG_SETUP_DATA0x18
>> +#define FW_CFG_FILE_DIR  0x19
>> +
>> +#define FW_CFG_FILE_FIRST0x20
>> +#define FW_CFG_FILE_SLOTS_MIN0x10
>> +
>> +#define FW_CFG_WRITE_CHANNEL 0x4000
>> +#define FW_CFG_ARCH_LOCAL0x8000
>> +#define FW_CFG_ENTRY_MASK(~(FW_CFG_WRITE_CHANNEL | FW_CFG_ARCH_LOCAL))
>> +
>> +#define FW_CFG_INVALID   0x
>> +
>> +/* width in bytes of fw_cfg contro

Re: [PATCH v14 2/9] fw_cfg: add a public uapi header

2018-02-15 Thread Marc-Andre Lureau
Hi

On Wed, Feb 14, 2018 at 9:41 PM, Michael S. Tsirkin  wrote:
> On Wed, Feb 14, 2018 at 03:18:43PM +0100, Marc-André Lureau wrote:
>> Create a common header file for well-known values and structures to be
>> shared by the Linux kernel with qemu or other projects.
>>
>> Suggested-by: Michael S. Tsirkin 
>> Signed-off-by: Marc-André Lureau 
>>
>> ---
>>
>> The related qemu patch making use of it, to be submitted:
>> https://github.com/elmarco/qemu/commit/4884fc9e9c4c4467a371e5a40f3181239e1b70f5
>> ---
>>  MAINTAINERS|   1 +
>>  drivers/firmware/qemu_fw_cfg.c |  22 +
>>  include/uapi/linux/fw_cfg.h| 102 
>> +
>>  3 files changed, 105 insertions(+), 20 deletions(-)
>>  create mode 100644 include/uapi/linux/fw_cfg.h
>>
>> diff --git a/MAINTAINERS b/MAINTAINERS
>> index 3bdc260e36b7..a66b65f62811 100644
>> --- a/MAINTAINERS
>> +++ b/MAINTAINERS
>> @@ -11352,6 +11352,7 @@ M:"Michael S. Tsirkin" 
>>  L:   qemu-de...@nongnu.org
>>  S:   Maintained
>>  F:   drivers/firmware/qemu_fw_cfg.c
>> +F:   include/uapi/linux/fw_cfg.h
>>
>>  QIB DRIVER
>>  M:   Dennis Dalessandro 
>> diff --git a/drivers/firmware/qemu_fw_cfg.c b/drivers/firmware/qemu_fw_cfg.c
>> index a41b572eeeb1..90f467232777 100644
>> --- a/drivers/firmware/qemu_fw_cfg.c
>> +++ b/drivers/firmware/qemu_fw_cfg.c
>> @@ -32,30 +32,12 @@
>>  #include 
>>  #include 
>>  #include 
>> +#include 
>>
>>  MODULE_AUTHOR("Gabriel L. Somlo ");
>>  MODULE_DESCRIPTION("QEMU fw_cfg sysfs support");
>>  MODULE_LICENSE("GPL");
>>
>> -/* selector key values for "well-known" fw_cfg entries */
>> -#define FW_CFG_SIGNATURE  0x00
>> -#define FW_CFG_ID 0x01
>> -#define FW_CFG_FILE_DIR   0x19
>> -
>> -/* size in bytes of fw_cfg signature */
>> -#define FW_CFG_SIG_SIZE 4
>> -
>> -/* fw_cfg "file name" is up to 56 characters (including terminating nul) */
>> -#define FW_CFG_MAX_FILE_PATH 56
>> -
>> -/* fw_cfg file directory entry type */
>> -struct fw_cfg_file {
>> - u32 size;
>> - u16 select;
>> - u16 reserved;
>> - char name[FW_CFG_MAX_FILE_PATH];
>> -};
>> -
>>  /* fw_cfg device i/o register addresses */
>>  static bool fw_cfg_is_mmio;
>>  static phys_addr_t fw_cfg_p_base;
>> @@ -597,7 +579,7 @@ MODULE_DEVICE_TABLE(of, fw_cfg_sysfs_mmio_match);
>>
>>  #ifdef CONFIG_ACPI
>>  static const struct acpi_device_id fw_cfg_sysfs_acpi_match[] = {
>> - { "QEMU0002", },
>> + { FW_CFG_ACPI_DEVICE_ID, },
>>   {},
>>  };
>>  MODULE_DEVICE_TABLE(acpi, fw_cfg_sysfs_acpi_match);
>> diff --git a/include/uapi/linux/fw_cfg.h b/include/uapi/linux/fw_cfg.h
>> new file mode 100644
>> index ..5b8136ce46ee
>> --- /dev/null
>> +++ b/include/uapi/linux/fw_cfg.h
>> @@ -0,0 +1,102 @@
>> +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
>> +#ifndef _LINUX_FW_CFG_H
>> +#define _LINUX_FW_CFG_H
>> +
>> +#include 
>> +
>> +#define FW_CFG_ACPI_DEVICE_ID"QEMU0002"
>> +
>> +/* selector key values for "well-known" fw_cfg entries */
>> +#define FW_CFG_SIGNATURE 0x00
>> +#define FW_CFG_ID0x01
>> +#define FW_CFG_UUID  0x02
>> +#define FW_CFG_RAM_SIZE  0x03
>> +#define FW_CFG_NOGRAPHIC 0x04
>> +#define FW_CFG_NB_CPUS   0x05
>> +#define FW_CFG_MACHINE_ID0x06
>> +#define FW_CFG_KERNEL_ADDR   0x07
>> +#define FW_CFG_KERNEL_SIZE   0x08
>> +#define FW_CFG_KERNEL_CMDLINE0x09
>> +#define FW_CFG_INITRD_ADDR   0x0a
>> +#define FW_CFG_INITRD_SIZE   0x0b
>> +#define FW_CFG_BOOT_DEVICE   0x0c
>> +#define FW_CFG_NUMA  0x0d
>> +#define FW_CFG_BOOT_MENU 0x0e
>> +#define FW_CFG_MAX_CPUS  0x0f
>> +#define FW_CFG_KERNEL_ENTRY  0x10
>> +#define FW_CFG_KERNEL_DATA   0x11
>> +#define FW_CFG_INITRD_DATA   0x12
>> +#define FW_CFG_CMDLINE_ADDR  0x13
>> +#define FW_CFG_CMDLINE_SIZE  0x14
>> +#define FW_CFG_CMDLINE_DATA  0x15
>> +#define FW_CFG_SETUP_ADDR0x16
>> +#define FW_CFG_SETUP_SIZE0x17
>> +#define FW_CFG_SETUP_DATA0x18
>> +#define FW_CFG_FILE_DIR  0x19
>> +
>> +#define FW_CFG_FILE_FIRST0x20
>> +#define FW_CFG_FILE_SLOTS_MIN0x10
>> +
>> +#define FW_CFG_WRITE_CHANNEL 0x4000
>> +#define FW_CFG_ARCH_LOCAL0x8000
>> +#define FW_CFG_ENTRY_MASK(~(FW_CFG_WRITE_CHANNEL | FW_CFG_ARCH_LOCAL))
>> +
>> +#define FW_CFG_INVALID   0x
>> +
>> +/* width in bytes of fw_cfg control register */
>> +#define FW_CFG_CTL_SIZE  0x02
>> +
>> +/* fw_cfg "file name" is up to 56 characters (including terminating nul) */
>> +#define FW_CFG_MAX_FILE_PATH 56
>> +
>> +/* size in bytes of fw_cfg signature */
>> +#define FW_CFG_SIG_SIZE 4
>> +
>> +/* FW_CFG_ID bits */
>> +#define FW_CFG_VERSION   0x01
>> +#define FW_CFG_VERSION_DMA   0x02
>> +
>> +/* fw_cfg file directory entry type */
>> +struct fw_cfg_file {
>> + __be32 size;/* file size */
>> + __be16 select;  /* write this to 0x510 to read it */
>> + __u16 reserv

Re: [PATCH v14 2/9] fw_cfg: add a public uapi header

2018-02-14 Thread Michael S. Tsirkin
On Wed, Feb 14, 2018 at 03:18:43PM +0100, Marc-André Lureau wrote:
> Create a common header file for well-known values and structures to be
> shared by the Linux kernel with qemu or other projects.
> 
> Suggested-by: Michael S. Tsirkin 
> Signed-off-by: Marc-André Lureau 
> 
> ---
> 
> The related qemu patch making use of it, to be submitted:
> https://github.com/elmarco/qemu/commit/4884fc9e9c4c4467a371e5a40f3181239e1b70f5
> ---
>  MAINTAINERS|   1 +
>  drivers/firmware/qemu_fw_cfg.c |  22 +
>  include/uapi/linux/fw_cfg.h| 102 
> +
>  3 files changed, 105 insertions(+), 20 deletions(-)
>  create mode 100644 include/uapi/linux/fw_cfg.h
> 
> diff --git a/MAINTAINERS b/MAINTAINERS
> index 3bdc260e36b7..a66b65f62811 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -11352,6 +11352,7 @@ M:"Michael S. Tsirkin" 
>  L:   qemu-de...@nongnu.org
>  S:   Maintained
>  F:   drivers/firmware/qemu_fw_cfg.c
> +F:   include/uapi/linux/fw_cfg.h
>  
>  QIB DRIVER
>  M:   Dennis Dalessandro 
> diff --git a/drivers/firmware/qemu_fw_cfg.c b/drivers/firmware/qemu_fw_cfg.c
> index a41b572eeeb1..90f467232777 100644
> --- a/drivers/firmware/qemu_fw_cfg.c
> +++ b/drivers/firmware/qemu_fw_cfg.c
> @@ -32,30 +32,12 @@
>  #include 
>  #include 
>  #include 
> +#include 
>  
>  MODULE_AUTHOR("Gabriel L. Somlo ");
>  MODULE_DESCRIPTION("QEMU fw_cfg sysfs support");
>  MODULE_LICENSE("GPL");
>  
> -/* selector key values for "well-known" fw_cfg entries */
> -#define FW_CFG_SIGNATURE  0x00
> -#define FW_CFG_ID 0x01
> -#define FW_CFG_FILE_DIR   0x19
> -
> -/* size in bytes of fw_cfg signature */
> -#define FW_CFG_SIG_SIZE 4
> -
> -/* fw_cfg "file name" is up to 56 characters (including terminating nul) */
> -#define FW_CFG_MAX_FILE_PATH 56
> -
> -/* fw_cfg file directory entry type */
> -struct fw_cfg_file {
> - u32 size;
> - u16 select;
> - u16 reserved;
> - char name[FW_CFG_MAX_FILE_PATH];
> -};
> -
>  /* fw_cfg device i/o register addresses */
>  static bool fw_cfg_is_mmio;
>  static phys_addr_t fw_cfg_p_base;
> @@ -597,7 +579,7 @@ MODULE_DEVICE_TABLE(of, fw_cfg_sysfs_mmio_match);
>  
>  #ifdef CONFIG_ACPI
>  static const struct acpi_device_id fw_cfg_sysfs_acpi_match[] = {
> - { "QEMU0002", },
> + { FW_CFG_ACPI_DEVICE_ID, },
>   {},
>  };
>  MODULE_DEVICE_TABLE(acpi, fw_cfg_sysfs_acpi_match);
> diff --git a/include/uapi/linux/fw_cfg.h b/include/uapi/linux/fw_cfg.h
> new file mode 100644
> index ..5b8136ce46ee
> --- /dev/null
> +++ b/include/uapi/linux/fw_cfg.h
> @@ -0,0 +1,102 @@
> +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
> +#ifndef _LINUX_FW_CFG_H
> +#define _LINUX_FW_CFG_H
> +
> +#include 
> +
> +#define FW_CFG_ACPI_DEVICE_ID"QEMU0002"
> +
> +/* selector key values for "well-known" fw_cfg entries */
> +#define FW_CFG_SIGNATURE 0x00
> +#define FW_CFG_ID0x01
> +#define FW_CFG_UUID  0x02
> +#define FW_CFG_RAM_SIZE  0x03
> +#define FW_CFG_NOGRAPHIC 0x04
> +#define FW_CFG_NB_CPUS   0x05
> +#define FW_CFG_MACHINE_ID0x06
> +#define FW_CFG_KERNEL_ADDR   0x07
> +#define FW_CFG_KERNEL_SIZE   0x08
> +#define FW_CFG_KERNEL_CMDLINE0x09
> +#define FW_CFG_INITRD_ADDR   0x0a
> +#define FW_CFG_INITRD_SIZE   0x0b
> +#define FW_CFG_BOOT_DEVICE   0x0c
> +#define FW_CFG_NUMA  0x0d
> +#define FW_CFG_BOOT_MENU 0x0e
> +#define FW_CFG_MAX_CPUS  0x0f
> +#define FW_CFG_KERNEL_ENTRY  0x10
> +#define FW_CFG_KERNEL_DATA   0x11
> +#define FW_CFG_INITRD_DATA   0x12
> +#define FW_CFG_CMDLINE_ADDR  0x13
> +#define FW_CFG_CMDLINE_SIZE  0x14
> +#define FW_CFG_CMDLINE_DATA  0x15
> +#define FW_CFG_SETUP_ADDR0x16
> +#define FW_CFG_SETUP_SIZE0x17
> +#define FW_CFG_SETUP_DATA0x18
> +#define FW_CFG_FILE_DIR  0x19
> +
> +#define FW_CFG_FILE_FIRST0x20
> +#define FW_CFG_FILE_SLOTS_MIN0x10
> +
> +#define FW_CFG_WRITE_CHANNEL 0x4000
> +#define FW_CFG_ARCH_LOCAL0x8000
> +#define FW_CFG_ENTRY_MASK(~(FW_CFG_WRITE_CHANNEL | FW_CFG_ARCH_LOCAL))
> +
> +#define FW_CFG_INVALID   0x
> +
> +/* width in bytes of fw_cfg control register */
> +#define FW_CFG_CTL_SIZE  0x02
> +
> +/* fw_cfg "file name" is up to 56 characters (including terminating nul) */
> +#define FW_CFG_MAX_FILE_PATH 56
> +
> +/* size in bytes of fw_cfg signature */
> +#define FW_CFG_SIG_SIZE 4
> +
> +/* FW_CFG_ID bits */
> +#define FW_CFG_VERSION   0x01
> +#define FW_CFG_VERSION_DMA   0x02
> +
> +/* fw_cfg file directory entry type */
> +struct fw_cfg_file {
> + __be32 size;/* file size */
> + __be16 select;  /* write this to 0x510 to read it */
> + __u16 reserved;
> + char name[FW_CFG_MAX_FILE_PATH];
> +};
> +
> +struct fw_cfg_files {
> + __be32 count; /* number of entries */
> + struct fw_cfg_file f[];
> +};

This struct wasn't there in the o

Re: [PATCH v14 2/9] fw_cfg: add a public uapi header

2018-02-14 Thread Michael S. Tsirkin
On Wed, Feb 14, 2018 at 03:18:43PM +0100, Marc-André Lureau wrote:
> Create a common header file for well-known values and structures to be
> shared by the Linux kernel with qemu or other projects.
> 
> Suggested-by: Michael S. Tsirkin 
> Signed-off-by: Marc-André Lureau 
> 
> ---
> 
> The related qemu patch making use of it, to be submitted:
> https://github.com/elmarco/qemu/commit/4884fc9e9c4c4467a371e5a40f3181239e1b70f5
> ---
>  MAINTAINERS|   1 +
>  drivers/firmware/qemu_fw_cfg.c |  22 +
>  include/uapi/linux/fw_cfg.h| 102 
> +
>  3 files changed, 105 insertions(+), 20 deletions(-)
>  create mode 100644 include/uapi/linux/fw_cfg.h
> 
> diff --git a/MAINTAINERS b/MAINTAINERS
> index 3bdc260e36b7..a66b65f62811 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -11352,6 +11352,7 @@ M:"Michael S. Tsirkin" 
>  L:   qemu-de...@nongnu.org
>  S:   Maintained
>  F:   drivers/firmware/qemu_fw_cfg.c
> +F:   include/uapi/linux/fw_cfg.h
>  
>  QIB DRIVER
>  M:   Dennis Dalessandro 
> diff --git a/drivers/firmware/qemu_fw_cfg.c b/drivers/firmware/qemu_fw_cfg.c
> index a41b572eeeb1..90f467232777 100644
> --- a/drivers/firmware/qemu_fw_cfg.c
> +++ b/drivers/firmware/qemu_fw_cfg.c
> @@ -32,30 +32,12 @@
>  #include 
>  #include 
>  #include 
> +#include 

You include the header from include/linux/fw_cfg.h ...

>  
>  MODULE_AUTHOR("Gabriel L. Somlo ");
>  MODULE_DESCRIPTION("QEMU fw_cfg sysfs support");
>  MODULE_LICENSE("GPL");
>  
> -/* selector key values for "well-known" fw_cfg entries */
> -#define FW_CFG_SIGNATURE  0x00
> -#define FW_CFG_ID 0x01
> -#define FW_CFG_FILE_DIR   0x19
> -
> -/* size in bytes of fw_cfg signature */
> -#define FW_CFG_SIG_SIZE 4
> -
> -/* fw_cfg "file name" is up to 56 characters (including terminating nul) */
> -#define FW_CFG_MAX_FILE_PATH 56
> -
> -/* fw_cfg file directory entry type */
> -struct fw_cfg_file {
> - u32 size;
> - u16 select;
> - u16 reserved;
> - char name[FW_CFG_MAX_FILE_PATH];
> -};
> -
>  /* fw_cfg device i/o register addresses */
>  static bool fw_cfg_is_mmio;
>  static phys_addr_t fw_cfg_p_base;
> @@ -597,7 +579,7 @@ MODULE_DEVICE_TABLE(of, fw_cfg_sysfs_mmio_match);
>  
>  #ifdef CONFIG_ACPI
>  static const struct acpi_device_id fw_cfg_sysfs_acpi_match[] = {
> - { "QEMU0002", },
> + { FW_CFG_ACPI_DEVICE_ID, },
>   {},
>  };
>  MODULE_DEVICE_TABLE(acpi, fw_cfg_sysfs_acpi_match);
> diff --git a/include/uapi/linux/fw_cfg.h b/include/uapi/linux/fw_cfg.h
> new file mode 100644
> index ..5b8136ce46ee
> --- /dev/null
> +++ b/include/uapi/linux/fw_cfg.h

Yet the header is located in include/uapi/linux/fw_cfg.h

How can this work?

> @@ -0,0 +1,102 @@
> +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */

As far as I can see these have all been lifted from a BSD-licensed
hw/nvram/fw_cfg.c in qemu. So please make it BSD accordingly,
and include the explanation in the commit log.

> +#ifndef _LINUX_FW_CFG_H
> +#define _LINUX_FW_CFG_H
> +
> +#include 
> +
> +#define FW_CFG_ACPI_DEVICE_ID"QEMU0002"
> +
> +/* selector key values for "well-known" fw_cfg entries */
> +#define FW_CFG_SIGNATURE 0x00
> +#define FW_CFG_ID0x01
> +#define FW_CFG_UUID  0x02
> +#define FW_CFG_RAM_SIZE  0x03
> +#define FW_CFG_NOGRAPHIC 0x04
> +#define FW_CFG_NB_CPUS   0x05
> +#define FW_CFG_MACHINE_ID0x06
> +#define FW_CFG_KERNEL_ADDR   0x07
> +#define FW_CFG_KERNEL_SIZE   0x08
> +#define FW_CFG_KERNEL_CMDLINE0x09
> +#define FW_CFG_INITRD_ADDR   0x0a
> +#define FW_CFG_INITRD_SIZE   0x0b
> +#define FW_CFG_BOOT_DEVICE   0x0c
> +#define FW_CFG_NUMA  0x0d
> +#define FW_CFG_BOOT_MENU 0x0e
> +#define FW_CFG_MAX_CPUS  0x0f
> +#define FW_CFG_KERNEL_ENTRY  0x10
> +#define FW_CFG_KERNEL_DATA   0x11
> +#define FW_CFG_INITRD_DATA   0x12
> +#define FW_CFG_CMDLINE_ADDR  0x13
> +#define FW_CFG_CMDLINE_SIZE  0x14
> +#define FW_CFG_CMDLINE_DATA  0x15
> +#define FW_CFG_SETUP_ADDR0x16
> +#define FW_CFG_SETUP_SIZE0x17
> +#define FW_CFG_SETUP_DATA0x18
> +#define FW_CFG_FILE_DIR  0x19
> +
> +#define FW_CFG_FILE_FIRST0x20
> +#define FW_CFG_FILE_SLOTS_MIN0x10
> +
> +#define FW_CFG_WRITE_CHANNEL 0x4000
> +#define FW_CFG_ARCH_LOCAL0x8000
> +#define FW_CFG_ENTRY_MASK(~(FW_CFG_WRITE_CHANNEL | FW_CFG_ARCH_LOCAL))
> +
> +#define FW_CFG_INVALID   0x
> +
> +/* width in bytes of fw_cfg control register */
> +#define FW_CFG_CTL_SIZE  0x02
> +
> +/* fw_cfg "file name" is up to 56 characters (including terminating nul) */
> +#define FW_CFG_MAX_FILE_PATH 56
> +
> +/* size in bytes of fw_cfg signature */
> +#define FW_CFG_SIG_SIZE 4
> +
> +/* FW_CFG_ID bits */
> +#define FW_CFG_VERSION   0x01
> +#define FW_CFG_VERSION_DMA   0x02
> +
> +/* fw_cfg file directory entry type */
> +struct fw_cfg_file {
> + __be32 size; 

[PATCH v14 2/9] fw_cfg: add a public uapi header

2018-02-14 Thread Marc-André Lureau
Create a common header file for well-known values and structures to be
shared by the Linux kernel with qemu or other projects.

Suggested-by: Michael S. Tsirkin 
Signed-off-by: Marc-André Lureau 

---

The related qemu patch making use of it, to be submitted:
https://github.com/elmarco/qemu/commit/4884fc9e9c4c4467a371e5a40f3181239e1b70f5
---
 MAINTAINERS|   1 +
 drivers/firmware/qemu_fw_cfg.c |  22 +
 include/uapi/linux/fw_cfg.h| 102 +
 3 files changed, 105 insertions(+), 20 deletions(-)
 create mode 100644 include/uapi/linux/fw_cfg.h

diff --git a/MAINTAINERS b/MAINTAINERS
index 3bdc260e36b7..a66b65f62811 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -11352,6 +11352,7 @@ M:  "Michael S. Tsirkin" 
 L: qemu-de...@nongnu.org
 S: Maintained
 F: drivers/firmware/qemu_fw_cfg.c
+F: include/uapi/linux/fw_cfg.h
 
 QIB DRIVER
 M: Dennis Dalessandro 
diff --git a/drivers/firmware/qemu_fw_cfg.c b/drivers/firmware/qemu_fw_cfg.c
index a41b572eeeb1..90f467232777 100644
--- a/drivers/firmware/qemu_fw_cfg.c
+++ b/drivers/firmware/qemu_fw_cfg.c
@@ -32,30 +32,12 @@
 #include 
 #include 
 #include 
+#include 
 
 MODULE_AUTHOR("Gabriel L. Somlo ");
 MODULE_DESCRIPTION("QEMU fw_cfg sysfs support");
 MODULE_LICENSE("GPL");
 
-/* selector key values for "well-known" fw_cfg entries */
-#define FW_CFG_SIGNATURE  0x00
-#define FW_CFG_ID 0x01
-#define FW_CFG_FILE_DIR   0x19
-
-/* size in bytes of fw_cfg signature */
-#define FW_CFG_SIG_SIZE 4
-
-/* fw_cfg "file name" is up to 56 characters (including terminating nul) */
-#define FW_CFG_MAX_FILE_PATH 56
-
-/* fw_cfg file directory entry type */
-struct fw_cfg_file {
-   u32 size;
-   u16 select;
-   u16 reserved;
-   char name[FW_CFG_MAX_FILE_PATH];
-};
-
 /* fw_cfg device i/o register addresses */
 static bool fw_cfg_is_mmio;
 static phys_addr_t fw_cfg_p_base;
@@ -597,7 +579,7 @@ MODULE_DEVICE_TABLE(of, fw_cfg_sysfs_mmio_match);
 
 #ifdef CONFIG_ACPI
 static const struct acpi_device_id fw_cfg_sysfs_acpi_match[] = {
-   { "QEMU0002", },
+   { FW_CFG_ACPI_DEVICE_ID, },
{},
 };
 MODULE_DEVICE_TABLE(acpi, fw_cfg_sysfs_acpi_match);
diff --git a/include/uapi/linux/fw_cfg.h b/include/uapi/linux/fw_cfg.h
new file mode 100644
index ..5b8136ce46ee
--- /dev/null
+++ b/include/uapi/linux/fw_cfg.h
@@ -0,0 +1,102 @@
+/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
+#ifndef _LINUX_FW_CFG_H
+#define _LINUX_FW_CFG_H
+
+#include 
+
+#define FW_CFG_ACPI_DEVICE_ID  "QEMU0002"
+
+/* selector key values for "well-known" fw_cfg entries */
+#define FW_CFG_SIGNATURE   0x00
+#define FW_CFG_ID  0x01
+#define FW_CFG_UUID0x02
+#define FW_CFG_RAM_SIZE0x03
+#define FW_CFG_NOGRAPHIC   0x04
+#define FW_CFG_NB_CPUS 0x05
+#define FW_CFG_MACHINE_ID  0x06
+#define FW_CFG_KERNEL_ADDR 0x07
+#define FW_CFG_KERNEL_SIZE 0x08
+#define FW_CFG_KERNEL_CMDLINE  0x09
+#define FW_CFG_INITRD_ADDR 0x0a
+#define FW_CFG_INITRD_SIZE 0x0b
+#define FW_CFG_BOOT_DEVICE 0x0c
+#define FW_CFG_NUMA0x0d
+#define FW_CFG_BOOT_MENU   0x0e
+#define FW_CFG_MAX_CPUS0x0f
+#define FW_CFG_KERNEL_ENTRY0x10
+#define FW_CFG_KERNEL_DATA 0x11
+#define FW_CFG_INITRD_DATA 0x12
+#define FW_CFG_CMDLINE_ADDR0x13
+#define FW_CFG_CMDLINE_SIZE0x14
+#define FW_CFG_CMDLINE_DATA0x15
+#define FW_CFG_SETUP_ADDR  0x16
+#define FW_CFG_SETUP_SIZE  0x17
+#define FW_CFG_SETUP_DATA  0x18
+#define FW_CFG_FILE_DIR0x19
+
+#define FW_CFG_FILE_FIRST  0x20
+#define FW_CFG_FILE_SLOTS_MIN  0x10
+
+#define FW_CFG_WRITE_CHANNEL   0x4000
+#define FW_CFG_ARCH_LOCAL  0x8000
+#define FW_CFG_ENTRY_MASK  (~(FW_CFG_WRITE_CHANNEL | FW_CFG_ARCH_LOCAL))
+
+#define FW_CFG_INVALID 0x
+
+/* width in bytes of fw_cfg control register */
+#define FW_CFG_CTL_SIZE0x02
+
+/* fw_cfg "file name" is up to 56 characters (including terminating nul) */
+#define FW_CFG_MAX_FILE_PATH   56
+
+/* size in bytes of fw_cfg signature */
+#define FW_CFG_SIG_SIZE 4
+
+/* FW_CFG_ID bits */
+#define FW_CFG_VERSION 0x01
+#define FW_CFG_VERSION_DMA 0x02
+
+/* fw_cfg file directory entry type */
+struct fw_cfg_file {
+   __be32 size;/* file size */
+   __be16 select;  /* write this to 0x510 to read it */
+   __u16 reserved;
+   char name[FW_CFG_MAX_FILE_PATH];
+};
+
+struct fw_cfg_files {
+   __be32 count; /* number of entries */
+   struct fw_cfg_file f[];
+};
+
+/* FW_CFG_DMA_CONTROL bits */
+#define FW_CFG_DMA_CTL_ERROR   0x01
+#define FW_CFG_DMA_CTL_READ0x02
+#define FW_CFG_DMA_CTL_SKIP0x04
+#define FW_CFG_DMA_CTL_SELECT  0x08
+#define FW_CFG_DMA_CTL_WRITE   0x10
+
+#define FW_CFG_DMA_SIGNATURE0x51454d5520434647ULL /* "QEMU CFG" */
+
+/* Control as first field allows for differen