MLB Network first reported the deal.
Garcia, 28, batted .282 with a career-high 20 home runs and 72 RBIs for the Tampa Bay Rays last season. He played in 125 games, and he provided depth and another strong defensive option in the outfield as Rays manager Kevin Cash juggled different alignments.
In five seasons with the White Sox, Garcia hit .271 with 74 home runs and 289 RBIs, including posting career highs in batting average (.330) and RBIs (80) in 2017, when he was an All-Star.
Knee and hamstring injuries limited him to just 93 games during his final season for the White Sox in 2018, but he reverted to his 2017 form last season and helped the Rays reach the American League Division Series for the first time since 2013.
A seven-year veteran of the major leagues, Garcia has a career average of .273 with 96 home runs and 374 RBIs.