xref: /aosp_15_r20/external/flashrom/action_descriptor.h (revision 0d6140be3aa665ecc836e8907834fcd3e3b018fc)
1*0d6140beSAndroid Build Coastguard Worker /* Copyright 2018 The Chromium OS Authors. All rights reserved.
2*0d6140beSAndroid Build Coastguard Worker  * Use of this source code is governed by a BSD-style license that can be
3*0d6140beSAndroid Build Coastguard Worker  * found in the LICENSE file.
4*0d6140beSAndroid Build Coastguard Worker  */
5*0d6140beSAndroid Build Coastguard Worker #ifndef __FLASHROM_ACTION_DESCRIPTOR_H
6*0d6140beSAndroid Build Coastguard Worker #define __FLASHROM_ACTION_DESCRIPTOR_H
7*0d6140beSAndroid Build Coastguard Worker 
8*0d6140beSAndroid Build Coastguard Worker #include <stddef.h>
9*0d6140beSAndroid Build Coastguard Worker #include <stdint.h>
10*0d6140beSAndroid Build Coastguard Worker #include <stdbool.h>
11*0d6140beSAndroid Build Coastguard Worker 
12*0d6140beSAndroid Build Coastguard Worker /*
13*0d6140beSAndroid Build Coastguard Worker  * Structure containing information about the processing flashrom is supposed
14*0d6140beSAndroid Build Coastguard Worker  * to perform on the current run.
15*0d6140beSAndroid Build Coastguard Worker  *
16*0d6140beSAndroid Build Coastguard Worker  * The variable size 'processing_units' array contains description of
17*0d6140beSAndroid Build Coastguard Worker  * processing to the flash block granularity.
18*0d6140beSAndroid Build Coastguard Worker  */
19*0d6140beSAndroid Build Coastguard Worker struct action_descriptor {
20*0d6140beSAndroid Build Coastguard Worker 	void *oldcontents;
21*0d6140beSAndroid Build Coastguard Worker 	void *newcontents;
22*0d6140beSAndroid Build Coastguard Worker 	struct processing_unit {
23*0d6140beSAndroid Build Coastguard Worker 		size_t block_size;  /* Block size granularity of this unit. */
24*0d6140beSAndroid Build Coastguard Worker 		size_t offset;	    /* Offset of the first block. */
25*0d6140beSAndroid Build Coastguard Worker 		size_t num_blocks;  /* Number of consecutive blocks. Value of
26*0d6140beSAndroid Build Coastguard Worker 				     * zero indicates the last entry in the
27*0d6140beSAndroid Build Coastguard Worker 				     * processing_units array. */
28*0d6140beSAndroid Build Coastguard Worker 		int block_eraser_index;  /* Index into 'block_erasers'. */
29*0d6140beSAndroid Build Coastguard Worker 		int block_region_index;  /* Index into 'eraseblocks'. */
30*0d6140beSAndroid Build Coastguard Worker 	} processing_units[0];
31*0d6140beSAndroid Build Coastguard Worker };
32*0d6140beSAndroid Build Coastguard Worker 
33*0d6140beSAndroid Build Coastguard Worker /* Forward reference for the flash descriptor structure defined in flash.h. */
34*0d6140beSAndroid Build Coastguard Worker struct flashrom_flashctx;
35*0d6140beSAndroid Build Coastguard Worker #define flashctx flashrom_flashctx /* TODO: Agree on a name and convert all occurences. */
36*0d6140beSAndroid Build Coastguard Worker 
37*0d6140beSAndroid Build Coastguard Worker /*
38*0d6140beSAndroid Build Coastguard Worker  * Function to create an action descriptor based on the 'before' and 'after'
39*0d6140beSAndroid Build Coastguard Worker  * flash contents.
40*0d6140beSAndroid Build Coastguard Worker  */
41*0d6140beSAndroid Build Coastguard Worker struct action_descriptor *prepare_action_descriptor(struct flashctx *flash,
42*0d6140beSAndroid Build Coastguard Worker 						    void *oldcontents,
43*0d6140beSAndroid Build Coastguard Worker 						    void *newcontents);
44*0d6140beSAndroid Build Coastguard Worker 
45*0d6140beSAndroid Build Coastguard Worker /*
46*0d6140beSAndroid Build Coastguard Worker  * Returns if the op should be consider a dry-run and return early or not.
47*0d6140beSAndroid Build Coastguard Worker  *
48*0d6140beSAndroid Build Coastguard Worker  * This function is set to indicate that the invoked flash programming
49*0d6140beSAndroid Build Coastguard Worker  * command should not be executed, but just verified for validity.
50*0d6140beSAndroid Build Coastguard Worker  *
51*0d6140beSAndroid Build Coastguard Worker  * This is useful when one needs to determine if a certain flash erase command
52*0d6140beSAndroid Build Coastguard Worker  * supported by the chip is allowed by the Intel controller on the device.
53*0d6140beSAndroid Build Coastguard Worker  */
54*0d6140beSAndroid Build Coastguard Worker bool is_dry_run(void);
55*0d6140beSAndroid Build Coastguard Worker 
56*0d6140beSAndroid Build Coastguard Worker /*
57*0d6140beSAndroid Build Coastguard Worker  * A function to test action descriptor implementation, returns number of
58*0d6140beSAndroid Build Coastguard Worker  * failures.
59*0d6140beSAndroid Build Coastguard Worker  */
60*0d6140beSAndroid Build Coastguard Worker int test_action_descriptor(void);
61*0d6140beSAndroid Build Coastguard Worker 
62*0d6140beSAndroid Build Coastguard Worker #endif  /* ! __FLASHROM_ACTION_DESCRIPTOR_H */
63