Hello Joursoir,

Nice to have you very interested in flashrom!
One thing I wanted to say: it would be great to include the mailing list if
you have discussions about the project. That would mean the community can
join and potentially help too, and this is really useful.

Thomas, thank you so much for replying, this is awesome! :)


On Sat, Mar 19, 2022 at 2:43 AM Thomas Heijligen <s...@posteo.de> wrote:

> Hi Joursoir,
>
> The idea for the "Restructure Shutdown Functions" project is to extend
> the struct programmer_entry with a function to handle programmer
> related shutdowns. Currently, the init function of each programmer
> calls, mostly indirect, register_shutdown on each item  separately to
> handle its shutdown later. In this project, the state tracking and
> shutdown of the programmer own data should be moved to each programmer.
>
> E.g.:
> const struct programmer_entry example_programmer = {
>     ...
>     .init = example_init,
>     .shutdown = example_shutdown,
> };
>
> struct example_data {
>     int reg_a;
> };
>
> static int example_init(struct example_data* data)
> {
>     ...
>     // keep track of the original value
>     data->reg_a = pci_read_word(dev, PCI_MAGIC_ADDR, PCI_MAGIC_VALUE);
>     // write new value
>     pci_write_word(dev, PCI_MAGIC_ADDR, 0x42);
> }
>
> static int example_shutdown(struct example_data* data)
> {
>     // restore the original value
>     pci_write_word(dev, PCI_MAGIC_ADDR, data->reg_a);
> }
>
> Feel free to contact me if you have further questions.
>
> -- Thomas
>
> On Fri, 2022-03-18 at 17:46 +0300, Joursoir wrote:
> > Good day,
> >
> > I am a student and very interested in flashrom. I fit the description
> > of experienced C programmer. Open-source and low-level programming
> > are
> > my interests. I already have real experience with flashrom (CH341A
> > programmer + chip "MX25L6436E") and want to become a GSoC 2022
> > contributor in this project.
> >
> > I find the "Restructure Shutdown Function" project interestring to
> > me.
> > But right now it has no mentors. Maybe someone from the mailing can
> > help me.
> >
> > I have gone through sources and understand how things are now. The
> > project description says "have a defined shutdown function in the
> > programmer API". But we already have it. It's programmer_shutdown().
> > Or no?
> >
> > The first and easiest thing that comes to my mind is to refuse using
> > callbacks and use enums, thusly:
> >
> > enum shutdown_func {
> >     SERPROG = 1 << 0,
> >     SPI = 1 << 1,
> >     ...
> > };
> >
> > int programmer_shutdown(enum shutdown_func execfunc)
> > {
> >     ...
> >
> >     if(execfunc & SERPROG)
> >         ret |= serprog_shutdown(...);
> >
> >     if(execfunc & SPI) {
> >         /* the problem is that SPI programmers have own shutdown
> > funcs,
> >            like dlc5_shutdown, byteblaster_shutdown,
> > stlinkv3_spi_shutdown,
> >            so use struct spi_master, that contains shutdown callback
> > */
> >         ret |= spi_master_shutdown(...);
> >     }
> >
> >     ...
> > }
> >
> > This system has disadvantages, but it'll make easier to track the
> > code
> > flow. What are the potential problems in this implementation?
> >
> > What's with struct flashrom_programmer? Is not implemented yet?
> >
> > I would appreciate any feedback.
> >
> > --
> > Joursoir
> > _______________________________________________
> > flashrom mailing list -- flashrom@flashrom.org
> > To unsubscribe send an email to flashrom-le...@flashrom.org
>
> _______________________________________________
> flashrom mailing list -- flashrom@flashrom.org
> To unsubscribe send an email to flashrom-le...@flashrom.org
>


-- 
Anastasia.
_______________________________________________
flashrom mailing list -- flashrom@flashrom.org
To unsubscribe send an email to flashrom-le...@flashrom.org

Reply via email to