"Kevin O'Connor" <kevin@koconnor.net> wrote on 11/30/2015 10:05:22 AM:

> From: "Kevin O'Connor" <kevin@koconnor.net>

> To: Stefan Berger/Watson/IBM@IBMUS
> Cc: seabios@seabios.org, Stefan Berger <stefanb@linux.vnet.ibm.com>
> Date: 11/30/2015 10:05 AM
> Subject: Re: [PATCH 3/3] tpm: Add a menu for TPM configuration
>
> On Sun, Nov 29, 2015 at 11:49:43PM -0500, Stefan Berger wrote:
> > From: Stefan Berger <stefanb@linux.vnet.ibm.com>
> >
> > This patch adds an new menu entry to the main menu. This menu item enables
> > the user to enter a TPM control menu which allows control of those aspects
> > of the TPM's state that can only be controlled while in the firmware
> > and while physical presence can be asserted.
> [...]
> > --- a/src/std/tcg.h
> > +++ b/src/std/tcg.h
> [...]
> > @@ -325,4 +348,22 @@ struct tpm_res_sha1complete {
> >      u8     hash[20];
> >  } PACKED;
> >  
> > +#define TPM_STATE_ENABLED 1
> > +#define TPM_STATE_ACTIVE 2
> > +#define TPM_STATE_OWNED 4
> > +#define TPM_STATE_OWNERINSTALL 8
> > +
> > +/*
> > + * physical presence interface
> > + */
> > +
> > +#define TPM_PPI_OP_NOOP 0
> > +#define TPM_PPI_OP_ENABLE 1
> > +#define TPM_PPI_OP_DISABLE 2
> > +#define TPM_PPI_OP_ACTIVATE 3
> > +#define TPM_PPI_OP_DEACTIVATE 4
> > +#define TPM_PPI_OP_CLEAR 5
> > +#define TPM_PPI_OP_SET_OWNERINSTALL_TRUE 8
> > +#define TPM_PPI_OP_SET_OWNERINSTALL_FALSE 9
>
> Are the above definitions part of the standard, or internal to the
> implementation?  If the latter, they should go into tcgbios.[ch]


These are actually the 'message codes' from the physical presence interface spec that can be sent from the OS
to the BIOS and on which the BIOS is supposed to act upon reboot. You may remember the ACPI patches I had for QEMU
where ACPI would write one of the above number into an allocated memory area for the BIOS to find. I also built
the menu using those 'message codes'.

>
> > --- a/src/tcgbios.c
> > +++ b/src/tcgbios.c
> > @@ -23,6 +23,8 @@
> >  #include "string.h" // checksum
> >  #include "tcgbios.h"// tpm_*, prototypes
> >  #include "util.h" // printf, get_keystroke
> > +#include "malloc.h" // malloc_*
> > +#include "stacks.h" // wait_threads
>
> Doesn't look like malloc_x() is used in this code.
>
> [...]
> > +typedef struct {
> > +    u8  op;
> > +} tpm_bios_cfg;
>
> What is the purpose of this struct?
>


This datatype is used to send messages from menu item selections to the part that processes above 'message codes'.
 
> > +extern void reset_vector(void) __noreturn;
>
> The code should use reset() (defined in stacks.h).  Directly calling
> reset_vector() in 32bit mode isn't strictly correct.


Ok, will change it. (Worked so far...)


   Stefan

>
> Looks good to me.
> -Kevin
>